本答案经本人简单作答、整理、修改(并是标准答案),仅供同学参考,欢迎同学提出宝贵意见。
4.10给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么
答案:
(1)立即寻址 没有 ip的内容
(2)直接寻址 7237H ;MOV AX,[7237h]
(3)使用BX的寄存器寻址 没有 ;MOV AX,BX
(4)使用BX的间接寻址 637DH ;MOV AX,[BX]
(5)使用BX的寄存器相对寻址 0D5B4H ;MOV AX,D[BX]
(6) 基址变址寻址 8E18H ;MOV AX,[BX][SI]
(7)相对基址变址 004FH ;MOV AX,D[BX][SI]
4.11.求执行两条指令后,各标志位的状态
MOV AL,91 ;执行后,(AL)=91=5BH
ADD AL,0BAH
加法执行如下:
0BA H 1011 1010
+ 05B H 0101 1011
115 H 1 0001 0101
CF:显然最高位产生了进位(两个加数都是两位的,和却有三位),CF=1
AF:低四位向高四位产生了进位(A+B产生进位),AF=1
ZF:运算结果不为0,ZF=0
SF:运算结果最高位为0(高四位:1H=0001B),SF=0
OF:负+正=正(两个加数的符号位不同),没有溢出,OF=0
4-12
(1)MOV AL,0F5H 正确
(2)ADD [BX][BP],BX 错误,不能同时使用[BX][BP]进行寻址
(3)CMP AL,100H 错误,AL为8位,100H大于8位,类型不匹配。
(4)TEST [BP],DL 正确
(5)ADC 15,CL 错误,目的操作数不能是立即数
(6)SUB [DI],DA_WORD 错误,两个操作数不能同时是存储器操作数。
(7)OR CH,CL 正确
(8)MOV AL,1000H 错误,AL为8位,1000H为16位,类型不匹配。
(9)SAR 10H[DI],2 错误,AL为8位,移位多次必须CL中。
(10)NOT AL,BL 错误,逻辑非操作是单操作指令。
(11)DEC CX,1 错误,逻辑非操作是单操作指令。
(12)LEA ES,TAB[BX] 错误,目的寄存器只能是通用寄存器。
4-13、根据下列要求,写出相应的汇编指令
答案:
(1)ADD AL,[BX][SI]
(3)ADD [BX][0B2H], CX
(4)MOV AX,2A59H
ADD [0524H] ,AX
(5)ADD AL ,0B5H
4-14、
答案:
(1)寄存器间接寻址
MOV BX, OFFSET TABLE
ADD BX, 08H
MOV DX ,[BX]
(2)寄存器相对寻址
MOV SI,O8H
MOV DX,[TABLE][SI]
(3)基址变址寻址
MOV BX , TABLE
MOV SI,O8H
MOV DX,[BX][SI]
4-15 15、假设(DS)=091DH,(SS)=1E4AH,(AX)=1234H,(BX)=0024H,(CX)=5678H,(BP)=0024H,(SI)=0012H,(DI)=0032H,(09226H)=00F6H,(09228H)=1E40H,(1E4F6H)=091DH。试给出下列各指令或程序段的分别执行的结果。
答:
(1) MOV CL,20H[BX][SI]
有效地址EA= 20H+[BX]+[SI] =20H+0024H+0012H=0056H
逻辑地址 DS:0056H
物理地址=091D0H+0056H=09226H (逻辑地址左移1为加有效地址)
CL=[09226H]=0F6H
(2) MOV [BP][DI],CX
有效地址EA= [BP]+[DI] =0024H+0032H=0056H
逻辑地址 SS:0056H
物理地址=1E4A0H+0056H=1E4F6H
[1E4F6H]=CX=5678H
(3) LEA BX,20H[BX][SI]
MOV AX,2[BX]
有效地址EA= 20H+[BX]+[SI] =20H+0024H+0012H=0056H
BX=0056H
有效地址EA= 2H+[BX]=2H+0056H=0058H
逻辑地址 DS:0058H
物理地址=091D0H+0058H=09228H
AX=[09228H]=1E40H
(4) LDS SI,[BX][DI]
MOV [SI],BX
有效地址EA= [BX]+[DI] =0024H+0032H=0056H
逻辑地址 DS:0056H
物理地址=091D0H+0056H=09226H
SI=[09226H]=00F6H
DS=[09226H+2H]=[09228H]=1E40H
有效地址EA= [SI]= 00F6H
逻辑地址 DS:00F6H
物理地址=1E400H+00 F6H=1E4F6H
[1E4F6H]=BX=0024H
(5) XCHG CX,32H[BX]
XCHG 20H[BX][SI],AX
有效地址EA= 32H+[BX] =32H+0024H=0056H
逻辑地址 DS:0056H
物理地址=091D0H+0056H=09226H
CX=[09226H]=00F6H
[09226H]=5678H
有效地址EA= 20H+[BX]+[SI] =20H+0024H+0012H=0056H
逻辑地址 DS:0056H
物理地址=091D0H+0056H=09226H
[09226H]= 1234H
AX=5678H
4-16 (01400)=1234H应改为(01410)=1234H
分析:有效地址EA=10H+[SI]= 10H+0400H=0410H
逻辑地址 DS:0100H
物理地址=01000H+0410H=01410H
MOV AX ,10H[SI] ;传送的是源操作数的内容 AX=1234H
LEA AX ,10H[SI] ;传送的是源操作数的有效地址 AX=0410H
4-17
mov ax,1234h ;将1234h这个16进制数放到ax寄存器中
mov bx ,5678h ;同理,将5678h这个16进制数放到bx这个寄存器中
push ax ;将ax压栈,即将1234h放到栈顶
push bx ;将bx压栈,即将5678h放到1234h上面(即栈顶)
pop cx ;弹出当前栈顶元素(5678h),并将其传送给cx,即(cx)=5678h
4-18写出执行以下计算的指令序列,其中X,Y,Z,R和W均为存放16位带符号数单元的地址。
(1) Z←W+(Z-X)
(2) Z←W-(X+6)-(R+9)
(3) Z←(W*X)/(Y+6),R←余数
(4) Z←((W-X)/5*Y)*2 本题与书上不尽相同参考下题
答案:
(1). MOV AX,Z ;把Z送到AX
SUB AX,X ;Z-X
ADD AX,W ;W+(Z-X)
MOV Z,AX ;结果保存在Z中
(2).MOV AX,R ;R送到AX中
ADD AX,9 ;R+9
MOV BX,X ;X送到BX中
ADD BX,6 ;X+6
ADD AX,BX ;(R+9)+(X+6),结果保存在AX中
MOV BX,W ; W送到BX中
SUB BX,AX ; W-(R+9)-(X+6),连续减去两个数,相当于减去这两个数的和~~
MOV Z,BX ;最终结果送到Z中
(3).MOV AX,W ;把W送到AX
IMUL X ;W*X 注意:低十六位保存在AX里,高十六位保存在DX里
MOV BX,Y ;把Y送到BX 里
ADD BX,6 ;Y+6
IDIV BX ;(W*X汇编table指令什么意思)/(Y+6) 注意:商保存在AX里,余数保存在DX里
MOV Z,AX ;把商送到Z中,
MOV R,DX ;把余数 送到R中
(4).MOV AX,W ;把W送到AX中
SUB AX,X ;W-X
CWD ;把AX中的十六位带符号数扩展成为32位,低十六位保存在AX中,高十六位保;在DX中
MOV BX,5 ;把5送到BX中
IDIV BX ;(W-X)/5 被除数为32位,除数为16位商为16位
IMUL Y ;上一步结果再乖以Y,积为32位
MOV BX,2 ;把2送到BX中
IMUL BX ;上一步乘法所得的积再乘以2,各为64位
MOV Z,EAX ;把结果中低32位放入Z双字单元中 ,超出范围
MOV [Z+4],EDX ;把结果中高32位放入Z+4双字单元中 ,超出范围
请参考下题
试编制一程序,计算下列公式的值,将商存放在Z单元,余数放在R单元内中。 X、Y、Z、
R、W分别为存放16位带符号数单元的地址。计算过程中中间结果和最后结果在16位二进制数范围内Z =(W-Z)/(5*Y)*2
mov ax,W ;把W送到AX中
sub ax,X ;W-X
mov bx,2 ;把2送到BX中
mul bx ;先乘以2
push ax ;保存中间结果(W-Z)*2
mov ax,5 ;把5送到AX中
mul Y ;5再乖以Y,乘机在AX中
mov bx,ax ;5*Y再放到BX中
pop ax ;返回中间结果(W-Z)*2
xor dx,dx
div bx ;实现(W-Z)*2/(5*Y),商在AX中,余数在DX中
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论