钱晓捷新版汇编语言程序设计习题答案
第1章 汇编语言基础知识
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: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字符串长度可以为1吗) mov ax,1200h ;AX=1200h
(2) mov ax,bx ; AX=0100h
(3) mov ax,[1200h] ; AX=4C2Ah
(1字符串长度可以为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
(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 两操作数类型不匹配
(2) mov ip,ax IP 指令指针禁止用户访问
(3) mov es,1234h 立即数不允许传给段寄存器
(4) mov es,ds 段寄存器之间不允许传送
(5) mov al,300 两操作数类型不匹配
(6) mov [sp],ax 目的操作数应为[ BP ]
(7) mov ax,bx+di 源操作数应为 [BX+DI]
(8) mov 20h,ah 立即数不能作目的操作数
2.3已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。请为如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。
lea bx,table ;获取table的首地址,BX=200H
mov al,8 ;传送欲转换的数字,AL=8
xlat ;转换为格雷码,AL=12H
2.4什么是堆栈,它的工作原则是什么,它的基本操作有哪两个,对应哪两种指令?
堆栈是一种按“先进后出”原则存取数据的存储区域。
堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。
2.5已知SS = FFA0H、SP = 00B0H,画图说明执行下面指令序列时,堆栈区和SP的内容如
何变化?
mov ax,8057h
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 AL=89h CF ZF SF OF PF
add al,al AL=12h 1 0 0 1 1
add al,9dh AL=0afh 0 0 1 0 1
cmp al,0bch AL=0afh 1 0 1 0 1
sub al,al AL=00h 0 1 0 0 1
dec al AL=0ffh 0 0 1 0 1
inc al AL=00h 0 1 0 0 1
2.7 设X、Y、Z均为双字数据,分别存放在地址为X、X+2;Y、Y+2;Z、Z+2的存储单元中,它们的运算结果存入W单元。阅读如下程序段,给出运算公式。
mov ax,X
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
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寄存器。 ADD DX,BX
(2)用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。 ADD AL,[BX+SI]
(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。 ADD DX,BX
(2)用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。 ADD AL,[BX+SI]
(3)用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回存储器中。 ADD [BX+0B2H],CX
(4)用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中。 ADD WORD PTR [0520H],3412H
(5)把数0A0H与AL寄存器的内容相加,并把结果送回AL中。 ADD AL,0A0H
(4)用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中。 ADD WORD PTR [0520H],3412H
(5)把数0A0H与AL寄存器的内容相加,并把结果送回AL中。 ADD AL,0A0H
2.9;设X、Y、Z、V均为16位带符号数,分别装在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。
为了避免与操作数地址混淆,将题中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 [si],30h xchg的操作数不能是立即数
(2 ) pop cs 不能对CS直接赋值
(3) sub [si],[di] 两个操作数不能都是存储单元
(4)push ah 堆栈的操作数不能是字节量
(5) adc ax,ds adc的操作数不能是段寄存器
(6) add [si],80h 没有确定是字节还是字操作
(7) in al,3fch in不支持超过FFH的直接寻址
(8) out dx,ah out只能以AL/AX为源操作数
2.11; 给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。 指令 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 0ffffh - - - - -
Test ax,0f0f0h 0ffffh 0 0 1 0 1
注意: 1. mov, not指令不影响标志位
2. 其他逻辑指令使CF=OF=0, 根据结果影响其他标志位。
2.12; 假设例题2.32的程序段中,AX = 08H,BX = 10H,请说明每条指令执行后的结果和各个标志位的状态。
指令 注释 执行结果 CF OF SF ZF PF |
mov si,ax si=ax si=0008h - - - - - |
shl si,1 si=2*ax si=0010h 0 0 0 0 0 |
add si,ax si=3*ax si=0018h 0 0 0 0 1 |
mov dx,bx dx=bx dx=0010h - - - - - |
mov cl,03h cl=03h - - - - - |
shl dx,cl dx=8*bx dx=0080h 0 u 0 0 0 |
sub dx,bx dx=7*bx dx=0070h 0 0 0 0 0 |
add dx,si dx=7*bx+3*ax dx=0088h 0 0 0 0 1 |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论