搜档网
当前位置:搜档网 › 新版汇编语言程序设计习题答案(钱晓捷主编)

新版汇编语言程序设计习题答案(钱晓捷主编)

第1章汇编语言基础知识

〔习题1.1〕简述计算机系统的硬件组成及各部分作用。

〔解答〕

CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐

条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处

理单元提供所需要的数据。

存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。

外部设备:实现人机交换和机间的通信。

〔习题1.2〕明确下列概念或符号:

主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB

〔解答〕

主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU 可以直接存取,它

由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大

量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。

RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读

写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息

只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电后能保存信息。

存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地

址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端

口。

KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。

〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序?

〔解答〕

用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的

程序就是目标程序。

〔习题1.4〕汇编语言与高级语言相比有什么优缺点?

〔解答〕

汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件

,因而容易产生运行速度快,指令序列短小的高效目标程序,可以直接控制计算机硬件部件,可以编写在“

时间”和“空间”两方面最有效的程序。

汇编语言与高级语言相比的缺点:由于与处理器密切相关导致通用性差、可移植性差,汇编语言功能有限,

又涉及寄存器、主存单元等硬件细节,编写汇编语言比较繁琐,调试起来也比较困难,编译程序产生的目标

程序往往比较庞大、程序难以优化,运行速度慢。

〔习题1.5〕将下列十六进制数转换为二进制和十进制表示

(1)FFH (2)0H (3)5EH (4)EFH

(5)2EH (6)10H (7)1FH (8)ABH

〔解答〕

(1)FFH 11111111B 255D

(2)0H 0B

0D

(3)5EH 1011110B 94D

(4)EFH 11101111B 239D

(5)2EH 101110B

46D

(6)10H 10000B

16D

(7)1FH 11111B

31D

(8)ABH 10101011B

171D

〔习题1.6〕

将下列十进制数转换为BCD码表示

(1)12 (2)24 (3)68 (4)127

(5)128 (6)255 (7)1234 (8)2458

〔解答〕

(1)12 00010010

(2)24 00100100

(3)68 01101000

(4)127 000100100111

(5)128 000100101000

(6)255 001001010101

(7)1234 0001001000110100

(8)2458 0010010001011000

〔习题1.7〕

将下列BCD码转换为十进制数

(1)10010001 (2)10001001 (3)00110110 (4)10010000

(5)00001000 (6)10010111 (7)10000001 (8)00000010

〔解答〕

(1)91

(2)89

(3)36

(4)90

(5)08

(6)97

(7)81

(8)02

〔习题1.8〕将下列十进制数分别用8位二进制数的原码、反码和补码表示

(1)0 (2)-127 (3)127 (4)-57

(5)126 (6)-126 (7)-128 (8)68

〔解答〕

(1)0 +0 00000000 00000000 00000000

-0 10000000 11111111 00000000

(2)-127 11111111 10000000 10000001

(3)127 01111111 01111111 01111111

(4)-57 10101111 11010000 11010001

(5)126 01111110 01111110 01111110

(6)-126 11111110 10000001 10000010

(7)-128 10000000

(8)68 01000100 01000100 01000100

〔习题1.9〕完成下列二进制数的运算

(1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001

(5)1011 ∧1001 (6)1011 ∨1001 (7)~1011 (8)1011 ? 1001

〔解答〕

(1)1011+1001=10100

(2)1011-1001=0010

(3)1011×1001=1100011

(4)10111000÷1001=10100,余数1000

(5)1011 ∧1001=1001

(6)1011 ∨1001=1011

(7)~1011=0100

(8) 1011?1001=0010(?代表异或)

〔习题1.10〕数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII 码为0dh、0ah对

应的是什么字符?

〔解答〕

数码0~9:30H~39H

大写字母A~Z:41H~5AH

小写字母a~z:61H~7AH

ASCII码为0dh、0ah分别对应回车和换行控制字符。

〔习题1.11〕计算机中有一个“01100001”编码,如果把它认为是无符号数,它是十进制什么数?如果认为

它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符?

〔解答〕

十进制无符号数:01100001B=61H=97

BCD码:61

ASCII码:a

〔习题1.12〕简述Intel 80x86系列微处理器在指令集方面的发展。

〔解答〕

1978年Intel,正式推出了16位8086CPU,1979年Intel推出了准16位微处理器8088,随后,Intel推出了

80186/80188,80186/80188指令系统比8086指令系统新增了若干条实用的指令,涉及堆栈操作、移位指令

、过程指令和边界检测及乘法指令,1982年Intel推出80286 CPU,80286指令系统包括全部80186指令及新

增的保护指令15条,其中有些保护方式在实方式下也可以使用,1985年,Intel80x86推出微处理器地进入第

三代80386 CPU,80386指令系统在兼容原来16位指令系统的基础上,全面升级为32位,还新增了有关位操

作、条件设置指令以及控制、调试和测试寄存器的传送指令等,1989年,Intel推出了80486CPU,80486将浮

点处理单元FPU集成进来,还采用了精简指令集计算机技术RISC和指令流水线方式,还新增了用于多处理器

和内部Cache操作的6条指令,1993年Intel制成了俗称586的微处理器,取名Pentium。Pentium仍为32位结

构,地址总线为32位,对常用的简单指令用硬件实现,重新设计指令的微代码等,Pentium 新增了一条8字节

比较交换指令和一条处理器识别指令,以及4条系统专用指令,1996年推出了MMX Pentium,新增了57条多媒

休指令,1995年Intel推出Pentium Pro新增了3条指令,1999年推出了PentiumⅢ新增了70条SSE指令,

2000年推出的Pentium4新增了76条SSE2指令

〔习题1.13〕什么是DOS和ROM-BIOS?

〔解答〕

DOS是Diskette Operating system的缩写,意思是磁盘操作系统,DOS主要是面向磁盘的系统软件,说得简

单些,就是人与机器的一座桥梁,是罩在机器硬件外面的一层“外壳”,是1981~1995年的个人电脑上使用

的一种主要的操作系统。BIOS(Basic Input/Output System)即基本输入输出系统,通常是

固化在只读

存储器(ROM)中,所以又称为ROM-BIOS。它直接对计算机系统中的输入、输出设备进行设备级、硬件级的

控制,是连接软件程序和硬件设备之间的枢纽。ROM-BIOS是计算机系统中用来提供最低级、最直接的硬件

控制的程序。

〔习题1.14〕简述PC机最低1MB主存空间的使用情况。

〔解答〕

(1)基本RAM区(00000H—9FFFFH)该区共640KB,由DOS进行管理。在这个区域中操作系统要占用掉一部分

低地址空间,其它则向用户程序开放。

(2)保留区RAM(A0000H--BFFFFFH)该区为系统安排的“显示缓冲存储区”,共126KB,是显卡上的芯片

提供支持,用于存放屏幕显示信息。但这部分地址空间实际上并没有全部使用。

(3)扩展区ROM(C0000H--DFFFFH)该区128KB,由接口卡上的芯片提供支持,用于为系统不直接支持的外

设安排设备驱动程序。用户固化的程序就可[安排在这一段,系统的会对它进行确认和连接。(4)系统区ROM(E0000H--FFFFFH)该区共128KB,由系统占用,它主要提供ROM--BIOS 程序,基本输入输

出程序BIOS,是操作系统的重要组成部分,主要用来驱动输入输出设备,也负责系统的上电检测,磁盘引导

等初始化操作,在ROM--BIOS中还有CMOS微机设置程序以及使用的字符图符信息等内容。

〔习题1.15〕罗列8086CPU的8个8位和16位通用寄存器,并说明各自的作用。

〔解答〕

(1)数据寄存器:AX称为累加器,使用频度最高,用于算术、逻辑运算以及与外设传送信息等;BX称为基

址寄存器,常用做存放存储器地址;CX称为计数器,作为循环和串操作等指令中的隐含计数器;DX称为数据

寄存器,常用来存放双字长数据的高16位,或存放外设端口地址。

(2)指针及变址寄存器包括SI,DI,BP,S P,四个寄存器,常用于存储器寻址时提供地址。SI 是源变址寄存器

,DI是目的变址寄存器,一般与DS联用确定数据段和附加段中某一存储单元地址,在串指令中,SI与DS联用

、DI和ES联用,分别寻址数据段和附加段;同时,在串指令中,SI和DI还都具有自动增量或减量的功能。S

P,为堆栈指针寄存器,指示栈顶的偏移地址;BP为基地址指针寄存器,表示堆栈段中的基地址。S P与BP寄

存器均可与SS段寄存器联合使用以确定堆栈段中的存储单元地址。

〔习题1.16〕什么是标志,它有什么用途?状态标志和控制标志有什么区别?画出标志寄存器FLAGS,说明

各个标志的位置和含义。

〔解答〕

标志用于反映指令执行结果或控制指令执行形式。它是汇编语言程序设计中必须特别注意的一个方面,状态

用来记录运行的结果的状态信息,许多指令的执行都将相应地设置它,控制标志位可由程序根据需要用指令

设置,用来控制处理器执行指令的方式。

CF是进位标志;ZF 是零标志;SF是符号标志;PF奇偶标志;OF溢出标志;AF辅助进位标志;DF方向标志;

IF中断允许标志;TF陷阱标志。

〔习题1.17〕举例说明CF和OF标志的差异。

〔解答〕

溢出标志OF和进位标志CF是两个意义不同的标志。

进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超

出范围,运算结果已经不正确。

例1:3AH + 7CH=B6H

无符号数运算:58+124=182,范围内,无进位

有符号数运算:58+124=182 ,范围外,有溢出

例2:AAH + 7CH=(1)26H

无符号数运算:170+124=294,范围外,有进位

有符号数运算:-86+124=28 ,范围内,无溢出

〔习题1.18〕字和双字在存储器中如何存放,什么是“小端方式”?对字和双字存储单元,什么是它们的对

齐地址?为什么要对齐地址?

〔解答〕

字或双字在存储器中占相邻的2个或4个存储单元;存放时,低字节存入低地址,高字节存入高地址;字或双

字单元的地址用它的低地址来表示。80x86处理器采用的这种“低对低,高对高”的存储形式,被称为“小

端方式”;将字单元安排在偶地址,双字节单元安排在模4地址,被称为“地址对齐方式”因为对于不对齐

地址的数据,处理器访问时,需要额外的访问时间,所以通常应该将数据的地址对齐,以取得较高的存取速

度。

〔习题1.19〕什么是8086中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?请将如下逻辑地址用物

理地址表达:

(1)FFFFh:0 (2)40h:17h (3)2000h:4500h (4)B821h:4567h

〔解答〕

在8086处理器中,对应每个物理存储单元都有一个唯一的20位编号,就是物理地址,从00000H~FFFFFH。

在8086内部和用户编程时,采用的段基地址: 段内偏移地址形式称为逻辑地址。

将逻辑地址中的段地址左移二进制4位(对应16进制是一位,即乘以16),加上偏移地址就得到20位物理地

如下逻辑地址用物理地址表达:

(1)FFFFh:0=FFFF0H

(2)40h:17h=00417H

(3)2000h:4500h=24500H

(4)B821h:4567h=BC777H (不要算错)

〔习题1.20〕8086有哪4种逻辑段,各种逻辑段分别是什么用途?

〔解答〕

代码段(Code Segment)用来存放程序的指令序列。处理器利用CS : IP取得下一条要执行的指令。

堆栈段(Stack Segment)确定堆栈所在的主存区域。处理器利用SS : SP操作堆栈中的数据。数据段(Data Segment)存放当前运行程序所用的数据。处理器利用DS : EA存取数据段中的数据。

附加段(Extra Segment)是附加的数据段,也用于数据的保存。处理器利用ES : EA存取数据段中的数据

〔习题1.21〕数据的默认段是哪个,是否允许其他段存放数据?如果允许,如何实现,有什么要求?

〔解答〕

数据的默认段是安排在数据段,也经常安排在附加段,尤其是串操作的目的区必须是附加段,允许其它段存

放数据,数据的存放比较灵活的,实际上可以存放在任何一种逻辑段中,这时,只要明确指明是哪个逻辑段

就可以了。

〔习题1.22〕什么是操作码、操作数和寻址方式?有哪三种给出操作数的方法?

〔解答〕

操作码说明计算机要执行哪种操作,它是指令中不可缺少的组成部分,操作数是指令执行的参与者,也是各

种操作的对象,我们把寻找数的方式叫做操作数的寻址方式。给出操作数的三种方法是直接给出,间接给出

,隐藏操作数方式给出。

〔习题1.23〕什么是有效地址EA?8086的操作数如果在主存中,有哪些寻址方式可以存取它?

〔解答〕

DS存放数据段的段地址,存储器中操作数的偏移地址则由各种主存方式得到,称之为有效地址EA。8086的操

作数如果在主存中,可以存取它的寻址方式有直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、

基址变址寻址方式、相对基址变址寻址方式。

〔习题1.24〕说明下列指令中源操作数的寻址方式?如果BX=2000H,DI=40H,给出DX 的值或有效地址EA

的值。

(1)mov dx,[1234h]

(2)mov dx,1234h

(3)mov dx,bx

(4)mov dx,[bx]

(5)mov dx,[bx+1234h]

(6)mov dx,[bx+di]

(7)mov dx,[bx+di+1234h]

〔解答〕

(1)直接寻址,EA=1234H

(2)立即数寻址,DX=1234H

(3)寄存器寻址,DX=2000H

(4)间接寻址,EA=2000H

(5)相对寻址,EA=3234H

(6)基址变址寻址,EA=2040H

(7)相对基址变址寻址,EA=3274H

第2章8086的指令系统

〔习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56

78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。

(1)mov ax,1200h

(2)mov ax,bx

(3)mov ax,[1200h]

(4)mov ax,[bx]

(5)mov ax,[bx+1100h]

(6)mov ax,[bx+si]

(7)mov ax,[bx][si+1100h]

〔解答〕

(1)AX=1200H

(2)AX=0100H

(3)AX=4C2AH ;偏移地址=bx=0100h

(4)AX=3412H ;偏移地址=bx=0100h

(5)AX=4C2AH ;偏移地址=bx+1100h=1200h

(6)AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h

(7)AX=65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h

〔习题2.2〕指出下列指令的错误

(1)mov cx,dl

(2)mov ip,ax

(3)mov es,1234h

(4)mov es,ds

(5)mov al,300

(6)mov [sp],ax

(7)mov ax,bx+di

(8)mov 20h,ah

〔解答〕

(1)两操作数类型不匹配

(2)IP指令指针禁止用户访问

(3)立即数不允许传给段寄存器

(4)段寄存器之间不允许传送

(5)两操作数类型不匹配

(6)目的操作数应为[ SI ]

(7)源操作数应为[BX+DI]

(8)立即数不能作目的操作数

〔习题2.3〕已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H

,它存在于以table为首地址(设为200H)的连续区域中。请为如下程序段的每条指令加上注释,说明每条

指令的功能和执行结果。

lea bx,table

mov al,8

xlat

〔解答〕

lea bx,table ;获取table的首地址,BX=200H

mov al,8 ;传送欲转换的数字,AL=8

xlat ;转换为格雷码,AL=12H P35

〔习题2.4〕什么是堆栈,它的工作原则是什么,它的基本操作有哪两个,对应哪两种指令?〔解答〕

堆栈是一种按“先进后出”原则存取数据的存储区域,位于堆栈段中,使用SS段寄存器记录其段地址;它的

工作原则是先进后出;堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。

〔习题2.5〕已知SS = 2200H、SP = 00B0H,画图说明执行下面指令序列时,堆栈区和SP 的内容如何变化?

mov ax,8057h

push ax

mov ax,0f79h

push ax

pop bx

pop [bx]

〔解答〕

mov ax,8057h

push ax

mov ax,0f79h

push ax

pop bx ;bx=0f79h

pop [bx] ;DS:[0f79h]=8057h

〔习题2.6〕给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:mov al,89h

add al,al

add al,9dh

cmp al,0bch

sub al,al

dec al

inc al

〔解答〕

mov al,89h ; AL=89h CF ZF SF OF PF

add al,al ; AL=12h 1 0 0 1 1

; 1000 1001

+1000 1001

10001 0010

add al,9dh ; AL=0afh 0 0 1 0 1

; 0001 0010

+ 1001 1101

1010 1111

cmp al,0bch ; AL=0afh 1 0 1 0 1

; 1010 1111

-1011 1100

* 0100 0011

sub al,al ; AL=00h 0 1 0 0 1

dec al ; AL=0ffh 0 0 1 0 1

; 0000 0000

- 0000 0001

*1111 1111

inc al ; AL=00h 0 1 0 0 1

;1111 1111

+0000 0001

*1111 1111

〔习题2.7〕设X、Y、Z均为双字数据,分别存放在地址为X、X+2;Y、Y+2;Z、Z+2的存储单元中,它们的

运算结果存入W单元。阅读如下程序段,给出运算公式。

mov ax,X

mov dx,X+2

add ax,Y

adc dx,Y+2

add ax,24

adc dx,0

sub ax,Z

sbb dx,Z+2

mov W,ax

mov W+2,dx

〔解答〕

W=X+Y+24-Z

〔习题2.8〕请分别用一条汇编语言指令完成如下功能:

(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。

(2)用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中

(3)用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回

存储器中。

(4)用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中。

(5)把数0A0H与AL寄存器的内容相加,并把结果送回AL中。

〔解答〕

(1)ADD DX,BX

(2)ADD AL,[BX+SI]

(3)ADD [BX+0B2H],CX

(4)ADD WORD PTR [0520H],3412H

(5)ADD AL,0A0H

〔习题2.9〕设X、Y、Z、V均为16位带符号数,分别装在X、Y、Z、V存储单元中,阅读如下程序段,得出它

的运算公式,并说明运算结果存于何处。

mov ax,X ;ax=X

imul Y;DX.AX=X*Y

mov cx,ax ;cx=X*Y的低16位

mox bx,dx ;bx=X*Y的高16位

mov ax,Z ;ax=Z

cwd

add cx,ax ;cx=Z的低16位+X*Y的低16位

adc bx,dx ;bx=Z的高16位+X*Y的高16位+低位进位

sub cx,540 ;cx=Z的低16位+X*Y的低16位-540

sbb bx,0 ;bx=Z的高16位+X*Y的高16位+低位进位-低位借位

mov ax,V ;ax=V

cwd

sub ax,cx ;ax=V的低16位-(Z的低16位+X*Y的低16位-540)

sbb dx,bx ;dx=V的高16位-(Z的高16位+X*Y的高16位+低位进位-低位借位)-低位借位

idiv X ;/X

〔解答〕

[V-(X*Y+Z-540)]/X

AX存商,DX存余数

〔习题2.10〕指出下列指令的错误:

(1)xchg [si],30h

(2)pop cs

(3)sub [si],[di]

(4)push ah

(5)adc ax,ds

(6)add [si],80h

(7)in al,3fch

(8)out dx,ah

〔解答〕

(1)xchg的操作数不能是立即数

(2)不应对CS直接赋值

(3)两个操作数不能都是存储单元

(4)堆栈的操作数不能是字节量

(5)adc的操作数不能是段寄存器

(6)没有确定是字节还是字操作

(7)in不支持超过FFH的直接寻址

(8)out只能以AL/AX为源操作数

〔习题2.11〕给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。

mov ax,1470h

and ax,ax

or ax,ax

xor ax,ax

not ax

test ax,0f0f0h

〔解答〕

mov ax,1470h ;AX=1470H CF ZF SF OF PF

and ax,ax ;AX=1470H 0 0 0 0 0

;0001 0100 0111 0000

or ax,ax ;AX=1470H 0 0 0 0 0

xor ax,ax ;AX=0000H 0 1 0 0 1

not ax ;AX=FFFFH 0 1 0 0 1

test ax,0f0f0h ;AX=FFFFH 0 0 1 0 1

注意:MOV和NOT指令不影响标志位;其他逻辑指令使CF=OF=0,根据结果影响其他标志位。

〔习题2.12〕假设例题2.32的程序段中,AX = 08H,BX = 10H,请说明每条指令执行后的结果和各个标志

位的状态。

〔解答〕

指令; 执行结果CF OF SF ZF PF

mov si,ax ; SI=AX=0008H - - - - -

shl si,1 ; SI=2*AX=0010H 0 0 0 0 0

add si,ax ; SI=3*AX=0018H 0 0 0 0 1

mov dx,bx ; DX=BX=0010H 0 0 0 0 1

mov cl,03h ; CL=03H 0 0 0 0 1

shl dx,cl ; DX=8*BX=0080H 0 u 0 0 0

sub dx,bx ; DX=7*BX=0070H 0 0 0 0 0

add dx,si ; DX=7*BX+3*AX=0088H 0 0 0 0 1

注意:逻辑左移N次相当于无符号整数乘以2的N次方,逻辑右移N次相当于无符号整数除以2的N次方。移位指

令根据移位的数据设置CF,根据移位后的结果影响SF,ZF,PF。在进行一位移位时,根据最高符号位是否改

变设置OF,如改变则OF=1。另外,程序注释用“u”表示标志无定义(不确定),“-”表示无影响。

〔习题2.13〕编写程序段完成如下要求:

(1)用位操作指令实现AL(无符号数)乘以10

(2)用逻辑运算指令实现数字0 ~ 9的ASCII码与非压缩BCD码的互相转换

(3)把DX.AX中的双字右移4位

〔解答〕

(1);不考虑进位

mov bl,al

mov cl,3

shl al,cl ;*8

add al,bl ;shl bl,1

add al,bl

;考虑进位

xor ah,ah

mov bx,ax

mov cl,3

shl ax,cl

add ax,bx ;shl bx,1

add ax,bx

(2)数字0~9的ASCII码是:30h~39h

非压缩BCD码的0~9是:00h~09h

方法一:

and al,0fh ;实现ASCII到非压缩BCD码的转换

or al,30h ;实现非压缩BCD码到ASCII的转换

方法二:

xor al,30h ;求反D5D4位,其他不变

;即高4位为3,则变为0;高4位为0,则变为3

(3)mov cl,4

again: shr dx,1 ;实现逻辑右移

;采用“sar dx,1”,则实现算术右移

rcr ax,1

dec cl

jnz again

〔习题2.14〕已知AL = F7H(表示有符号数-9),分别编写用SAR和IDIV指令实现的除以2的程序段,并说

明各自执行后,所得的商是什么?

〔解答〕

(1)用sar编写

mov al,0f7h ; -9送AL 1111 1001

sar al,1 ; 结果:AL=1111 1100B=0FBH 即-5

(2)用idiv编写

mov al,0f7h ; -9送al

cbw ; 字节符号扩展位字

mov bl,2 ; 注意除数不可为立即数

idiv bl ; 结果:商为al=fch (-4)

; 余数:ah=ffh (-1)

结论:符号数的除法用idiv 准确。

〔习题2.15〕已知数据段500h ~600h处存放了一个字符串,说明下列程序段执行后的结果:mov si,600h

mov di,601h

mov ax,ds

mov es,ax

mov cx,256

std

rep movsb

〔解答〕

〔习题2.16〕说明下列程序段的功能

cld

mov ax,0fefh

mov cx,5

mov bx,3000h

mov es,bx

mov di,2000h

rep stosw

〔解答〕

将es:di (即3000:2000h或32000h)开始的5个单元的内容置为0fefh。

〔习题2.17〕指令指针IP是通用寄存器还是专用寄存器?有指令能够直接它赋值吗?哪类指令的执行会改变

它的值?

〔解答〕

指令指针IP不是通用寄存器,不可直接赋值,属于专用寄存器。有且仅有循环、转移、子程序调用和返回、

中断类等指令可以改变它的值。

〔习题2.18〕控制转移类指令中有哪三种寻址方式?

〔解答〕

控制转移类指令的寻址方式:相对寻址、直接寻址方式和间接寻址方式(又可以分成寄存器和存储器间接寻

址)。

〔习题2.19〕什么是短转移short jump、近转移near jump和远转移far jump?什么是段内转移和段间转移

?8086有哪些指令可以实现段间转移?

〔解答〕

短转移:指段内-128~127之间的转移,位移量用一个字节表示

近转移:指段内±32K之间的转移,位移量用一个字表示

远转移:指段间1MB范围的转移

段内转移:指在同一个代码段内的转移,可以是短转移或者近转移

段间转移:指转移到另外一个代码段,就是远转移

8086/8088CPU的JMP、CALL和INT n指令可以实现段间转移

〔习题2.20〕8086的条件转移指令的转移范围有多大?实际编程时,你如何处理超出范围的条件转移?

〔解答〕

8086的条件转移的转移范围:在当前指令地址的+127~-128之内。

如条件转移的转移范围超出此范围,可在此范围内安排一条无条件转移,再转移到范围外的目标地址。

〔习题 2.21〕假设DS=2000H,BX=1256H,SI=528FH,位移量TABLE=20A1H,[232F7H]=3280H,[264E5H]

=2450H,试问执行下列段内间接寻址的转移指令后,转移的有效地址是什么?

(1)JMP BX

(2)JMP TABLE[BX]

(3)JMP [BX][SI]

〔解答〕

(1)转移的有效地址EA= BX=1256H

(2)转移的有效地址EA= [DS:20A1H+1256H]=[232F7]=3280H

(3)转移的有效地址EA= [DS:1256H+528FH]=264E5H=2450H

〔习题2.22〕判断下列程序段跳转的条件

(1)xor ax,1e1eh

je equal

(2)test al,10000001b

jnz there

(3)cmp cx,64h

jb there

〔解答〕

(1)AX=1e1eh(异或后为0)

(2)AL的D0或D7至少有一位为1

(3)CX(无符号数)<64h

〔习题2.23〕设置CX = 0,则LOOP指令将循环多少次?例如:

mov cx,0

delay: loop delay

〔解答〕

216次。

〔习题2.24〕假设AX和SI存放的是有符号数,DX和DI存放的是无符号数,请用比较指令和条件转移指令实现

以下判断:

(1)若DX > DI,转到above执行;

(2)若AX > SI,转到greater执行;

(3)若CX = 0,转到zero执行;

(4)若AX-SI产生溢出,转到overflow执行;

(5)若SI≤AX,转到less_eq执行;

(6)若DI≤DX,转到below_eq执行。

〔解答〕

(1)若DX > DI,转到above执行

cmp dx,di

ja above ;=jnbe above

(2)若AX > SI,转到greater执行

cmp ax,si

jg greater ;=jnle greater

(3)若CX = 0,转到zero执行

cmp cx,0

jz zero ;=jcxz zero

(4)若AX-SI产生溢出,转到overflow执行;

cmp ax,si

jo overflow

(5)若SI≤AX,转到less_eq执行;

cmp si,ax ; cmp ax,si

jle less_eq ; jge less_eq

(6)若DI≤DX,转到below_eq执行。

cmp di,dx ; cmp dx,di

jbe below_eq ; jae below_eq

〔习题2.25〕有一个首地址为array的20个字的数组,说明下列程序段的功能。

mov cx,20

mov ax,0

mov si,ax

sum_loop: add ax,array[si]

add si,2

loop sum_loop

mov total,ax

〔解答〕

将首地址为array得20个字的数组求和,并将结果存入total 单元中。

〔习题2.26〕按照下列要求,编写相应的程序段:

(1)起始地址为string的主存单元中存放有一个字符串(长度大于6),把该字符串中的第1个和第6个字符

(字节量)传送给DX寄存器。

(2)从主存buffer开始的4个字节中保存了4个非压缩BCD码,现按低(高)地址对低(高)位的原则,将它

们合并到DX中。

(3)编写一个程序段,在DX高4位全为0时,使AX = 0;否则使AX = -1。

(4)有两个64位数值,按“小端方式”存放在两个缓冲区buffer1和buffer2中,编写程序段完成buffer1

-buffer2功能。

(5)假设从B800h : 0开始存放有100个16位无符号数,编程求它们的和,并把32位的和保存在DX.AX中。

(6)已知字符串string包含有32KB内容,将其中的‟$‟符号替换成空格。

(7)有一个100个字节元素的数组,其首地址为array,将每个元素减1(不考虑溢出)存于原处。

(8)统计以‟$‟ 结尾的字符串srting的字符个数。

〔解答〕

(1)解答:

mov si,0

mov dl,string[si] ;第1个字符送dl寄存器:mov dl,stirng[0]

mov si,5

mov dh,string[si] ;第6个字符送dh寄存器:mov dl,stirng[5]

(2)解答:

xor si,si ;si清零

mov al,buffer[si] ;第一字节

inc si

mov ah,buffer[si] ;第二字节

mov cl,4

shl ah,cl ;BCD码移到高半字节

or al,ah ;组合成压缩BCD码

mov dl,al ;存入dl寄..

inc si

mov al,buffer[si] ;第三字节

inc si

mov ah,buffer[si] ;第四字节

mov cl,4

shl ah,cl ;BCD码移到高半字节

or al,ah ;组合成压缩BCD码

mov dh,al ;存入dh寄..

(3)解答:

test dx,0f000h ; test dh,0f0h

jz next ; jnz next

mov ax,-1 ; mov ax,0

jmp again

next: mov ax,0 ; mov ax,0ffffh

again: ...

(4)解答:

mov ax, word ptr buffer1

sub ax, word ptr buffer2 ;先减低16位

mov dx, word ptr buffer1+2

sbb dx, word ptr buffer2+2 ;后减高16位,需减低16位的借位(5)解答:

mov ax,0b800h

mov ds,ax ;段地址

xor si,si ;地址偏移量si=0

xor dx,dx ;和的高字dx=0

mov cx,99 ;加的次数

mov ax,[si] ;第一个数

again: inc si ;指向下一个字单元

inc si

add ax,[si] ;加下一个数

jnc noc ;无进位转

inc dx ;有进位dx=dx+1

noc: dec cx ;次数-1

jnz cx,again ;非0继续加

(6)解答1:不使用串操作指令(更好)

mov si,offset string

mov cx,8000h ; 32k=2^15=8000h

again: cmp byte ptr [si], …$‟;…$‟ =24h

jnz next ; 不要采用jz 进行分支

mov byte ptr [si], …‟;… ‟=20h

next: inc si

loop again ; dec cx

; jnz again

(6)解答2:使用串操作指令

mov di,offset string

mov al,‟$‟

mov cx,8000h

cld

again: scasb

jnz next

mov byte ptr es : [di-1], …‟

next: loop again

(7)解答1:

mov si,offset array

mov cx,100

again: dec byte ptr [si]

inc si

loop again

(7)解答2:

xor si,si ; si<--0

mov cx,100 ; 循环次数

again: dec array[si]

inc si

loop again

(7)解答3:

mov si,offset array

mov di,si

mov ax,ds

mov es,ax

mov cx,100

cld

again: lodsb

dec al

stosb

loop again

(8)解答:

xor si,si ;si<--0

coun: cmp string[si],'$'

je done

inc si

jmp coun

done: ...

〔习题2.27〕对下面要求,分别给出3种方法,每种方法只用一条指令。

(1)使CF=0 (2)使AX=0 (3)同时使AX=0和CF=0

〔解答〕

(1)解答:

clc

and ax,ax

or ax,ax

(2)解答:

xor ax,ax

and ax,0

mov ax,0

(3)解答:

and ax,0

xor ax,ax

sub ax,ax

〔习题2.28〕参照本习题的示意图,分析调用序列,画出每次调用及返回时的堆栈状态。其

新版汇编语言程序设计习题答案(钱晓捷主编)电子教案

新版汇编语言程序设计习题答案(钱晓捷主 编)

新版汇编语言程序设计习题答案(钱晓捷主编) 第一章汇编语言基础知识 1.1、简述计算机系统的硬件组成及各部分作用 1.2、明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 1.3、什么是汇编语言源程序、汇编程序、目标程序? 1.4、汇编语言与高级语言相比有什么优缺点? 1.5、将下列十六进制数转换为二进制和十进制表示 (1)FFH (2)0H (3)5EH (4)EFH (5)2EH (6)10H (7)1FH (8)ABH 1.6、将下列十进制数转换为BCD码表示 (1)12 (2)24 (3)68 (4)127 (5)128 (6)255 (7)1234 (8)2458 1.7、将下列BCD码转换为十进制数 (1)10010001 (2)10001001 (3)00110110 (4)10010000 (5)00001000 (6)10010111 (7)10000001 (8)00000010 1.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示 (1)0 (2)-127 (3)127 (4)-57 (5)126 (6)-126 (7)-128 (8)68 1.9、完成下列二进制数的运算 (1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001 (5)1011 ∧~1011 (8)1011 ⊕ 1001 1001(6)1011 ∨1001(7) 1.10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符? 1.11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符? 1.12、简述Intel 80x86系列微处理器在指令集方面的发展。 1.13、什么是DOS和ROM-BIOS? 1.14、简述PC机最低1MB主存空间的使用情况。 1.15、罗列8086CPU的8个8位和16位通用寄存器,并说明各自的作用。 1.16、什么是标志,它有什么用途?状态标志和控制标志有什么区别?画出标志寄存器FLAGS,说明各个标志的位置和含义。

钱晓捷新版汇编语言程序设计习题答案(1-4)

钱晓捷新版汇编语言程序设计习题答案 第一章汇编语言基础知识 1.17、举例说明CF和OF标志的差异。 溢出标志OF和进位标志CF是两个意义不同的标志 进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确?例1:3AH + 7CH=B6H 无符号数运算:58+124=182,范围内,无进位 有符号数运算: 58+124=182 ,范围外,有溢出?例2:AAH + 7CH=(1)26H 无符号数运算:170+124=294,范围外,有进位 有符号数运算:-86+124=28 ,范围内,无溢出 1.20、8086有哪4种逻辑段,各种逻辑段分别是什么用途?(解答) 代码段(Code Segment)用来存放程序的指令序列。处理器利用CS : IP取得下一条要执行的指令 ?堆栈段(Stack Segment)确定堆栈所在的主存区域。处理器利用SS : SP操作堆栈中的数据 ?数据段(Data Segment)存放当前运行程序所用的数据。处理器利用DS : EA存取数据段中的数据 ?附加段(Extra Segment)是附加的数据段,也用于数据的保存。处理器利用ES : EA存取数据段中的数据 第二章8086指令系统 2.1已知DS = 2000H、BX = 0100H、SI = 0002H,存储单元[20100H] ~ [20103H]依次存放12 34 56 78H,[21200H] ~ [21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。 (1) mov ax,1200h ;AX=1200h (2) mov ax,bx ; AX=0100h (3) mov ax,[1200h] ; AX=4C2Ah (4) mov ax,[bx] ; AX=3412h (5) mov ax,[bx+1100h] ; AX=4C2Ah (6) mov ax,[bx+si] ; AX=7856h (7) mov ax,[bx][si+1100h] ; AX=65B7h 2.2指出下列指令的错误 (1) mov cx,dl 两操作数类型不匹配

新版汇编语言程序设计习题答案(钱晓捷主编)

第1章汇编语言基础知识 〔习题1.1〕简述计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐 条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处 理单元提供所需要的数据。 存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。 外部设备:实现人机交换和机间的通信。 〔习题1.2〕明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 〔解答〕 主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU 可以直接存取,它 由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大 量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。 RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读 写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息 只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电后能保存信息。 存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地 址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端 口。 KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。 〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的 程序就是目标程序。 〔习题1.4〕汇编语言与高级语言相比有什么优缺点? 〔解答〕 汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件

新版汇编语言程序设计习题答案(钱晓捷主编)

新版汇编语言程序设计习题答案(钱晓捷主编) 第一章汇编语言基础知识 1.1、简述计算机系统的硬件组成及各部分作用 1.2、明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 1.3、什么是汇编语言源程序、汇编程序、目标程序? 1.4、汇编语言与高级语言相比有什么优缺点? 1.5、将下列十六进制数转换为二进制和十进制表示 (1)FFH (2)0H (3)5EH (4)EFH (5)2EH (6)10H (7)1FH (8)ABH 1.6、将下列十进制数转换为BCD码表示 (1)12 (2)24 (3)68 (4)127 (5)128 (6)255 (7)1234 (8)2458 1.7、将下列BCD码转换为十进制数 (1)10010001 (2)10001001 (3)00110110 (4)10010000 (5)00001000 (6)10010111 (7)10000001 (8)00000010 1.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示 (1)0 (2)-127 (3)127 (4)-57 (5)126 (6)-126 (7)-128 (8)68 1.9、完成下列二进制数的运算 (1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001 (5)1011 ∧~1011 (8)1011 ⊕1001 1001(6)1011 ∨1001(7) 1.10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符? 1.11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符? 1.12、简述Intel 80x86系列微处理器在指令集方面的发展。 1.13、什么是DOS和ROM-BIOS? 1.14、简述PC机最低1MB主存空间的使用情况。 1.15、罗列8086CPU的8个8位和16位通用寄存器,并说明各自的作用。 1.16、什么是标志,它有什么用途?状态标志和控制标志有什么区别?画出标志寄存器FLAGS,说明各个标志的位置和含义。

汇编语言程序设计(钱晓捷)课后答案.docx

汇编语言程序设计(第二版)钱晓捷 习题答案 第二章(Ol) 2.1 (1) AX = 120Oh (2) AX = 0100h (3) AX = 4C2Ah (4) AX = 3412h (5) AX = 4C2Ah (6) AX = 7856h (7) AX = 65B7h 2.2(1)两操作数类型不匹配 (2) IP 指令指针禁止用户访问 (3) 立即数不允许传给段寄存器 (4) 段寄存器之间不允许传送 (5) 两操作数类型不匹配 ⑹目的操作数应为[BP ] ⑺源操作数应为[BX+DI] (8) 立即数不能作目的操作数 2.3 Iea bx,table ;获取 table 的首地址,BX = 200H mov al,8 ;传送欲转换的数字,AL = 8 xlat ;转换为格雷码,AL = 12H 2.4 堆栈是一种按 先进后出”原则存取数据的存储区域。 堆栈的两种基本操作是压栈和出栈,对应的指令是 PUSH 和POPO 2.5 PuSh ax mov ax,0f79h mov ax,8057h PUSh ax mov ax,0f79h PUSh ax pop bx pop [bx] 2.6 AL=89h CF ZF AL=12h 1 0 AL=Oafh 0 0 AL=Oafh 1 0 AL=00h 0 1 AL=Offh 0 0 AL=00h 0 1 ;bx=0f79h ;DS:[0f79h]=8057h SF OF PF 0 1 1 1 0 1 1 0 1 0 0 1 1 0 1 0 0 1 2.7 W=X+Y+24-Z

2.8 (1)ADD DX,BX (2)ADD AL,[BX+SI] (3)ADD [BX+0B2H],CX (4)ADD WoRD PTR [0520H],3412H (5)ADD AL,0A0H 2.9 ;为了避免与操作数地址混淆,将题中X,Y,Z,V字操作数改为A,B,C,D mov ax,X ;ax=A imul Y ;dx,ax = A*B (将操作数看作符号数,以下同) mov cx,ax mov bx,dx ;bx,ax <-- dx,ax =A*B mov ax,Z ;ax = C CWd ;dx,ax =C (扩展符号后为双字) add cx,ax adc bx,dx ;bx,cx <-- bx,cx+dx,ax=A*B+C Sub cx,540 Sbb bx,0 ;bx,cx<-- A*B+C-540 mov ax, V ;ax= D CWd ;dx,ax= D (扩展符号后为双字) SUb ax, CX Sbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540) idiv X ;运算结果:[D-(A*B+C-540h)]∕A;ax 存商,dx 存余数 2.10; (1) XChg的操作数不能是立即数 (2不能对CS直接赋值 (3)两个操作数不能都是存储单元 (4)堆栈的操作数不能是字节量 (5)adc的操作数不能是段寄存器 (6)没有确定是字节还是字操作 (7)in不支持超过FFH的直接寻址 (8)OUt只能以AL/AX为源操作数 第二章(02) 2.11; 指令AX的值CF OF SF ZF PF Mov ax,1407h 1470h - - - - - And ax,ax 1470h 0 0 0 0 0 Or ax,ax 1470h 0 0 0 0 0 Xor ax,ax 0 0 0 0 1 1 Not ax Offffh - - - - - TeSt ax,0f0f0h Offffh 0 0 1 0 1 2. 其他逻辑指令使CF=OF=0,根据结果影响其他标志位。

汇编语言程序设计(第四版)第3章【课后答案】

汇编语言程序设计第四版 【课后习题答案】--囮裑為檤 第3章汇编语言程序格式 〔习题3.1〕伪指令语句与硬指令语句的本质区别是什么?伪指令有什么主要作用? 〔解答〕 伪指令语句与硬指令语句的本质区别是能不能产生CPU动作; 伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生CPU动作的说明,并在程序执行前由汇编程序完成处理。 〔习题3.2〕什么是标识符,汇编程序中标识符怎样组成? 〔解答〕 为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符; 汇编语言中的标识符一般最多由31个字母、数字及规定的特殊符号(如-,$,?,@)组成,不能以数字开头。 〔习题3.3〕什么是保留字,汇编语言的保留字有哪些类型,并举例说明。 〔解答 保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。汇编语言对大小写不敏感。如定义字节数和字符串的DB就是伪指令助记符。 〔习题3.4〕汇编语句有哪两种,每个语句由哪4个部分组成? 〔解答〕 汇编语句有执行性语句和说明性语句; 执行性语句由标号、硬指令助记符、操作数和注释四部分组成; 说明性语句由名字、伪指令助记符、参数和注释四部分组成 〔习题3.5〕汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。 〔解答〕 ⒈编辑文本编辑程序汇编语言源程序.asm ⒉汇编汇编程序目标模块文件.obj ⒊连接连接程序可执行文件.exe或.com

⒋调试调试程序应用程序 〔习题3.6〕区分下列概念: (1)变量和标号 (2)数值表达式和地址表达式 (3)符号常量和字符串常量 〔解答〕 (1)变量是在程序运行过程中,其值可以被改变的量;标号是由用户自定义的标识符,指向存储单元,表示其存储内容的逻辑地址。 (2)数值表达式一般是由运算符连接的各种常数所构成的表达式,地址表达式是由名字、标号以及利用各种的操作符形成的表达式。 (3)在程序中,为了使常量更便于使用和阅读,经常将一些常量用常量定义语句定义为符号常量,被一对双引号括起来的若干个字符组成的字符序列被称为字符串常量。 〔习题3.7〕假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的错误原因。 (1)mov byte ptr [bx],1000 (2)mov bx,offset myword[si] (3)cmp mybyte1,mybyte2 (4)mov al,mybyte1+mybyte2 (5)sub al,myword (6)jnz myword 〔解答〕 (1)1000超出了一个字节范围 (2)寄存器的值只有程序执行时才能确定,而offset是汇编过程计算的偏移地址,故无法确定,改为lea bx,myword[si] (3)两个都是存储单元,指令不允许 (4)变量值只有执行时才确定,汇编过程不能计算 (5)字节量AL与字量myword,类型不匹配 (6)Jcc指令只有相对寻址方式,不支持间接寻址方式 〔习题3.8〕OPR1是一个常量,问下列语句中两个AND操作有什么区别? AND AL,OPR1 AND 0feh 〔解答〕

汇编语言程序设计(钱晓捷)课后答案

汇编语言程序设计(钱晓捷)课后答案 汇编语言程序设计(第二版) 钱晓捷习题答案 第二章(01) 2.1 (1)AX=1200h (2)AX=0100h (3)AX=4C2Ah (4)AX=3412h (5)AX=4C2Ah (6)AX=7856h (7)AX=65B7h 2.2(1) 两操作数类型不匹配 (2) IP指令指针禁止用户访问 (3) 立即数不允许传给段寄存器 (4) 段寄存器之间不允许传送 (5) 两操作数类型不匹配 (6) 目的操作数应为[ BP ] (7) 源操作数应为[BX+DI] (8) 立即数不能作目的操作数 2.3 lea bx,table ;获取table的首地址,BX=200H

mov al,8 ;传送欲转换的数字,AL=8 xlat ;转换为格雷码,AL=12H 2.4 堆栈是一种按“先进后出”原则存取数据的存储区域。 堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH 和POP。 2.5 mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop [bx] ;DS:[0f79h]=8057h 2.6 AL=89h CF ZF SF OF PF AL=12h 1 0 0 1 1 AL=0afh 0 0 1 0 1 AL=0afh 1 0 1 0 1 AL=00h 0 1 0 0 1 AL=0ffh 0 0 1 0 1 AL=00h 0 1 0 0 1 2.7 W=X+Y+24-Z

2.8 (1)ADD DX,BX (2)ADD AL,[BX+SI] (3)ADD [BX+0B2H],CX (4)ADD WORD PTR [0520H],3412H (5)ADD AL,0A0H 2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,D mov ax,X ;ax=A imul Y ;dx,ax = A*B (将操作数看作符号数,以下同) mov cx,ax mov bx,dx ;bx,ax DI,转到above执行 cmp dx,di ja above ;=jnbe above (2)若AX > SI,转到greater执行 cmp ax,si jg greater ;=jnle greater (3)若CX = 0,转到zero执行 cmp cx,0 jcxz zero jz zero (4)若AX-SI产生溢出,转到overflow执行; cmp ax,di

Zhujiao057《汇编语言程序设计》习题答案

《汇编语言程序设计》习题答案 一、单项选择题(本大题共170小题,每小题2分) 1、在汇编语言程序中,对 END 语句的叙述正确的是( C )。 a、END 语句是一可执行语句 B、END 语句表示程序执行到此结束 C、END 语句表示源程序到此结束 D、END 语句在汇编后要产生机器码 2、将 DX 的内容除以 2,正确的指令是( C ) a、DIV 2 B、DIV DX,2 C、SaR DX,1 D、SHL DX,1 3、下列数值表达式和地址表达式中,错误的是( D )。 a、MOV aL,8*14+4 B、MOV SI,OFFSET BUF+13 C、MOV CX,NUM2-NUM1 D、MOV CX,NUM2+NUM1 4、用来存放下一条将要执行的指令地址的寄存器是 ( B ) a、SP B、IP C、BP D、CS 5、要使串处理从低地址向高地址进行,应把标志位置为 ( D ) a、IF=1 B、TF=0 C、DF=1 D、DF=0 6、设SS=2050H,SP=0140H,则栈顶存贮单元的物理地址是( a ) a、20640H B、2063EH C、2063FH D、21900H 7、十进制数269变换为十六进制数是( C )。 a、10B B、10C C、10D D、10E 8、8位的微型计算机系统是以16位来表示地址,则该微机系统有( C )个地址空间。 a、255 B、65535 C、65536 D、1048576 9、8位有符号二进制数能表示的最大十进制数是( D )。 a、256 B、255 C、128 D、127 10、十六进制数88H,可表示成下面几种形式,请找出错误的表示( D )。 a、无符号十进制数136 B、带符号十进制数-120 C、压缩型BCD十进制数88 D、8位二进制数-8的补码表示 11、有一个数值152,它与十六进制数6a相等,那么该数值是( B )。

汇编语言程序设计课后答案

汇编语言程序设计(第二版) 钱晓捷习题答案 第二章〔01〕 2.1 〔1〕A*=1200h 〔2〕A*=0100h 〔3〕A*=4C2Ah 〔4〕A*=3412h 〔5〕A*=4C2Ah 〔6〕A*=7856h 〔7〕A*=65B7h 2.2(1)两操作数类型不匹配 (2) IP指令指针制止用户访问 (3)立即数不允许传给段存放器 (4)段存放器之间不允许传送 (5)两操作数类型不匹配 (6)目的操作数应为[ BP ] (7)源操作数应为 [B*+DI] (8)立即数不能作目的操作数 2.3 lea b*,table;获取table的首地址,B*=200H mov al,8;传送欲转换的数字,AL=8 *lat;转换为格雷码,AL=12H 2.4 堆栈是一种按“先进后出〞原则存取数据的存储区域。 堆栈的两种根本操作是压栈和出栈,对应的指令是PUSH和POP。 2.5 mov a*,8057h push a* mov a*,0f79h push a*

pop b* ;b*=0f79h pop [b*] ;DS:[0f79h]=8057h 2.6 AL=89h CF ZF SF OF PF AL=12h 1 0 0 1 1 AL=0afh 0 0 1 0 1 AL=0afh 1 0 1 0 1 AL=00h 0 1 0 0 1 AL=0ffh 0 0 1 0 1 AL=00h 0 1 0 0 1 2.7W=*+Y+24-Z 2.8 〔1〕ADD D*,B* 〔2〕ADD AL,[B*+SI] 〔3〕ADD [B*+0B2H],C* 〔4〕ADD WORD PTR [0520H],3412H 〔5〕ADD AL,0A0H 2.9;为了防止与操作数地址混淆,将题中*,Y,Z,V 字操作数改为A,B,C,D mov a*,*;a*=A imul Y;d*,a* = A*B (将操作数看作符号数,以下同〕 mov c*,a* mov b*,d*;b*,a* <-- d*,a* =A*B mov a*,Z;a* = C cwd;d*,a* =C〔扩展符号后为双字〕 add c*,a* adc b*,d*;b*,c* <-- b*,c*+d*,a*=A*B+C

新版汇编语言程序设计钱晓捷第3章习题答

第3章汇编语言程序格式 〔习题3.1〕伪指令语句与硬指令语句的本质区别是什么?伪指令有什么主要作用? 〔解答〕 伪指令语句与硬指令语句的本质区别是能不能产生CPU动作; 伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生CPU动作的说明,并在程序执行前由汇编程序完成处理。 〔习题3.2〕什么是标识符,汇编程序中标识符怎样组成? 〔解答〕 为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符; 汇编语言中的标识符一般最多由31个字母、数字及规定的特殊符号(如-,$,?,@)组成,不能以数字开头。 〔习题3.3〕什么是保留字,汇编语言的保留字有哪些类型,并举例说明。 〔解答 保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。汇编语言对大小写不敏感。如定义字节数和字符串的DB就是伪指令助记符。 〔习题3.4〕汇编语句有哪两种,每个语句由哪4个部分组成? 〔解答〕 汇编语句有执行性语句和说明性语句; 执行性语句由标号、硬指令助记符、操作数和注释四部分组成; 说明性语句由名字、伪指令助记符、参数和注释四部分组成 〔习题3.5〕汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。 〔解答〕 ⒈编辑文本编辑程序汇编语言源程序.asm ⒉汇编汇编程序目标模块文件.obj ⒊连接连接程序可执行文件.exe或.com ⒋调试调试程序应用程序 〔习题3.6〕将第2章习题2.36采用简化段定义格式编写成一个完整的源程序。 〔解答〕

新版汇编语言程序的设计钱晓捷第4章习题答案

第4章基本汇编语言程序设计 〔习题4.1〕例题4.2如果要求算术右移8位,如何修改程序。 〔解答〕 思路:首先由最高位字节向次低位字节传送……次低位字节向最低位字节传送(共7次);再判最高位字节符号位,如为0,送00h到最高位字节;如为1,送ffh到最高位字节。传送可参考例题4.2,不过应从第一号字节送第零号字节,……最高位字节向次低位字节传送;也可以用循环来完成: .model small .stack 256 .data qvar dq 1234567887654321h .code .startup mov cx,7 mov si,1 again: mov al, byte ptr qvar[si] mov byte ptr qvar[si-1],al inc si loop again test al,80h jz ezz mov bl,0ffh jmp done ezz: mov bl,0 done: mov byte ptr qvar[7],bl .exit 0 end 〔习题4.2〕例题4.2如果要求算术左移7位,如何用移位指令实现。 〔解答〕 思路:可设计外循环体为8个字节左移一次,方法是:最低位字节算术左移一次,次低位字节至最高位字节依次带 CF 位循环左移一次(内循环共8次),外循环体控制执行7次即可。 .model small .stack 256 .data qvar dq 1234567887654321h .code .startup mov dx, 7 ;外循环次数 mov ax, byte ptr qvar[0] ;最低位字节送ax lpp: shl ax,

钱晓捷 汇编语言程序设计课后习题(作业新)

习题1 (1) 习题2 (4) 习题3 (10) 习题4 (13) 习题5 (15) 习题6 (18) 习题7 (21) 习题8 (24) 习题9 (27)

1.1 简述计算机系统的硬件组成及各部分作用。 1.2 明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB,MB,GB和TB。1.3 什么是汇编语言源程序、汇编程序、目标程序? 1.4 汇编语言与高级语言相比有什么优缺点? 1.5 将下列十六进制转化为二进制和十进制表示。 (1)FFH (2)0H (3)5EH (4)EFH (5)2EH (6)10H (7)1FH (8)ABH 1.6 将下列十进制数转换为BCD码表示。 (1)12 (2)24 (3)68 (4)127 (5)128 (6)255 (7)1234 (8)2458 解答: 十进制数 BCD码 1200010010 2400100100 6801101000 127000100100111 128000********* 255001001010101 12340001001000110100 2458 0010010001011000 1.7 将下列BCD码转换为十进制数。 (1)10010001 (2)10001001 (3)00110110 (4)10010000 (5)00001000 (6)10010111 (7)10000001 (8)00000010 解答: BCD码十进制数 10010001 91 10001001 89 00110110 36 10010000 90 00001000 08 10010111 97 10000001 81 00000010 02 1.8 将下列十进制数分别用八位二进制数的原码、反码和补码表示。 (1)0 (2)-127 (3)127 (4)-57 (5)126 (6)-126 (7)-128 (8)68 1.9 完成下列二进制数的计算。 (1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000/1001 (5)1011∧1001 (6)1011∨1001 (7)~1011 (8)1011⊕1001 1.10 数码0~9,大写字母A~Z,小写字母a~z,对应的ASCII码分别是多

第四版钱晓捷课后习题答案

“微机原理与接口技术”习题解答 第1章微型计算机系统 〔习题1.1〕简答题 (1)计算机字长(Word)指的是什么? (2)总线信号分成哪三组信号? (3)PC机主存采用DRAM组成还是SRAM组成? (4)Cache是什么意思? (5)ROM-BIOS是什么? (6)中断是什么? (7)32位PC机主板的芯片组是什么? (8)教材中MASM是指什么? (9)处理器的“取指-译码-执行周期”是指什么? (10)本课程的主要内容属于计算机系统层次结构中哪个层次? 〔解答〕 ①处理器每个单位时间可以处理的二进制数据位数称计算机字长。 ②总线信号分成三组,分别是数据总线、地址总线和控制总线。 ③PC机主存采用DRAM组成。 ④高速缓冲存储器Cache是处理器与主存之间速度很快但容量较小的存储器。 ⑤ROM-BIOS是“基本输入输出系统”,操作系统通过对BIOS的调用驱动各硬件设备,用户也可以在应用程序中调用BIOS中的许多功能。 ⑥中断是CPU正常执行程序的流程被某种原因打断、并暂时停止,转向执行事先安排好的一段处理程序,待该处理程序结束后仍返回被中断的指令继续执行的过程。 ⑦主板芯片组是主板的核心部件,它提供主板上的关键逻辑电路。 ⑧MASM是微软开发的宏汇编程序。 ⑨指令的处理过程。处理器的“取指—译码—执行周期”是指处理器从主存储器读取指令(简称取指),翻译指令代码的功能(简称译码),然后执行指令所规定的操作(简称执行)的过程。 ⑩机器语言层,即指令集结构。 (学生很多认为是:汇编语言层。前4章主要涉及汇编语言,但本书还有很多处理器原理等内容) 〔习题1.2〕判断题 (1)软件与硬件的等价性原理说明软硬件在功能、性能和成本等方面是等价的。 (2)IA-64结构是IA-32结构的64位扩展,也就是Intel 64结构。 (3)8086的数据总线为16位,也就是说8086的数据总线的个数、或说条数、位数是16。 (4)微机主存只要使用RAM芯片就可以了。 (5)处理器并不直接连接外设,而是通过I/O接口电路与外设连接。 (6)处理器是微机的控制中心,内部只包括5大功能部件的控制器。 (7)Windows的模拟DOS环境与控制台环境是一样的。 (8)16位IBM PC/AT机采用ISA系统总线。 (9)IA-32处理器吸取了RISC技术特长。RISC是指复杂指令集计算机。

相关主题