第7章答案

更新时间:2023-11-15 11:58:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

7.3 设AX=1122,BX=3344H,CX=5566H,SS=095BH,SP=0040H,下述程序执行后AX,

BX,CX,DX 4个通用寄存器内容是多少?画出堆栈存储器的物理地址及存储内容和SP指向的示意图。 PUSH AX PUSH BX PUSH CX POP BX POP AX POP DX

参考答案:(BX)=5566H, (AX)=3344H, (DX)=1122H,(CX)=5566H 堆栈段物理地址=SS*16(左移4位)+SP

095EBH 66H

095ECH 55H

095FDH 44H

095EEH 33H

095EFH 22H

11H SP→ 095F0H

7.4 设 SP=0040H,如果用进栈指令存入5个数据,则SP=0036H ,若用出栈指

令取出两个数据,则SP=003AH 。

7.5将表中程序段各指令执行后AX的值用十六进制数填入表中

参考答案: 程序段 MOV AX,0 DEC AX ADD AX,7FFFH ADC AX,1 NEG AX AX 0 FFFFH 7FFEH 8000H 8000H 程序段 OR AX,3FDFH AND AX,0EBEDH XCHG AH,AL SAL AX,1 RCL AX,1 AX BFDFH ABCDH CDABH 9B56H 36ADH 7.6 用十六进制数填下表,已知DS=1000H,ES=2000H,SS=0FC0H,通用寄存器的值

为0。

参考答案:逻辑地址=段基址:段内偏移地址

BP以SS为默认段基址,其余寄存器以DS为默认段基址 ES:为段前缀,以ES为段基址

指令 SUB [BP],AL MOV [BX],BH MOV [DI],DL MOV ES:[SI],BL ADD 500H[BP],AH SUB [SI-300H],AL MOV 1000H[DI],DL MOV [BX-8],CL MOV ES:1000H[DI],CH MOV [BP+SI],DH MOV [BX+DI],DL 存储器操作数逻辑地址 0FC0H:0000H 1000H:0000H 1000H:0000H 2000H:0000H 0FC0H:0500H 1000H:FD00H 1000H:1000H 1000H:FFF8H 2000H:1000H 0FC0H:0000H 1000H:0000H 7.7 试给出执行完下列指令后OF、SF、ZF、CF4个可测试标志位的状态(用十

六进制给出FLAG的值,其余各位为0)

(1)MOV AX,2345H (2) MOV BX,5439H ADD AX,3219H ADD BX,456AH (3)MOV CX,3579H (4) MOV DX,9D82H SUB CX,4EC1H SUB DX,4B5FH OF DF IF TF SF ZF 0 AF 0 溢出 方向 中断 陷阱 符号 为零 辅进 PF 0 奇偶 CF 进位 参考答案:(这里除了上面4个标志还考虑了奇偶标志PF和辅助进位标志AF) (1)AX=555EH FLAG=0000H OF DF IF TF SF ZF 0 AF 0 PF 0 CF 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (2)BX=99A3H FLAG=0894H OF DF IF TF SF ZF 0 AF 0 PF 0 CF 0 0 0 0 1 0 0 0 1 0 0 1 0 1 0 0 (3)CX=E6B8 FLAG=0081H OF DF IF TF SF ZF 0 AF 0 PF 0 CF 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 (4)DX=5223 FLAG=0014H OF DF IF TF SF ZF AF PF 0 CF 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 7.8 AX 中有一负数,欲求其绝对值,若该数为补码,则使用指令 NEG AX ;

若为原码则用指令AND AX,7FFFH。 。

7.9 分别写出实现如下功能的程序段: (1)将AX中间8位(做高8位),BX低4位和DX高4位(做低4位)拼成一个新字。(注意:左移右移操作)

AND AX,0FF0H MOV CL,04H SHL AX,CL AND BL,0FH AND DH,0F0H SHR DH,CL SHL BL,CL OR AL,DH OR AL,BL

(2)将CX中间8位取反,其余位不变

XOR CX,0FF0H

(3)将数据段以BX为偏移地址的连续3单元中的无符号数求和。

MOV CX,3 MOV AL,0 LAB:ADD AL,[BX] ADC AH,00H;(注意字节单元的和可能超过一个字节,故这里和扩展至AH)

INC BX LOOP LAB

(4) 将数据段中以BX为偏移地址的连续4单元中的内容颠倒过来

MOV CX,2 ;(4/2单元个数除2,循环计数) MOV SI,BX ADD SI,3 ;(指向最后一个数据单元,首地址+单元个数-1) LAB:MOV AL,[BX]

XCHG AL,[SI] MOV [BX],AL INC BX DEC SI LOOP LAB

(5) 将BX中的4位压缩BCD数用非压缩数形式按序放在AL,BL,CL和DL中 MOV CL,4 (注意先后次序,不能用其它寄存器) MOV DL,BL AND DL,0FH MOV AL,BH SHR AL,CL XCHG BH,BL AND BL,0FH SHR BH,CL MOV CL,BH

(6) 不用乘法指令实现AL(无符号数)乘以20

AL*(24+22)( 24左移4位,22左移2位)

MOV AH,0

MOV CL,2

SAL AX,CL ;进行乘4操作 MOV BX,AX ;保留乘4中间结果 SAL AX,CL;再移2次,相当于乘16 ADD AX,BX

7.10 一段数据定义为:

DATA SEGMENT

S1 DB 0,1,2,3,4,5 S2 DB ‘12345’ COUNT=$-S1 NB DB 3DUP(2) NW DW 120,-256 P DW -1 DATA ENDS

(1)画出该数据段数据存储形式(注意:符号常量COUNT不分配存储单元)

地址 内容 S1 -0000H 00H 0001H 01H 0002H 02H 0003H 03H 0004H 04H 0005H 05H S2 -0006H 31H 0007H 32H 0008H 33H 0009H 34H 000AH 35H NB -000BH 02H 000CH 02H 000DH 02H NW -000EH 78H 000FH 00H 0010H AAH 0011H FDH P -0012H FFH 0013H FFH

(2)在下表中填写各变量的偏移地址和各变量的值 变量名 偏移地址 变量值 变量名 偏移地址 变量值 S1 0000H 00H NW 000EH 0078H S2 0006H 31H P 0012H FFFFH NB 000BH 02H (3) 填写表中程序段各指令执行后。目的寄存器的值,并指出源操作数所使用的寻址方式(注意:COUNT是符号常量是立即数) 程序段 目的寄存器的值 源操作数的寻址方式 MOV BX,OFFSET S1+3 0003H 立即寻址 MOV SI,OFFSET S2 0006H 立即寻址 MOV CL,COUNT 000BH 立即寻址 MOV BP,NW+2 FDAAH 直接寻址 MOV DX,WORD PTR NB 0202H 直接寻址 MOV AL,[SI+3] 34H 变址寻址 MOV AH,[SI+BX+1] 35H 基址变址寻址 MOV CH,BYTE PTR NW+3 FDH 直接寻址 (4)改正下列不正确的指令错误

a. MOV AX,S1 改正 MOV AX,WORD PTR S1

b. MOV BP,OFFSET S2 改正 MOV BX,OFFSET S2 MOV CL,[BP] MOV CL,[BX]

c. MOV SI,OFFSET NB 改正 MOV SI,OFFSET NB MOV [SI],‘+’ MOV BYTE PTR [SI],‘+’

d. MOV DL,NW+2 改正 MOV DL, BYTE PTR NW+2

e. MOV DI,CH 改正 MOV DI,CX

f. MOV BX, OFFSET S1 改正 MOV BX, OFFSET S1 MOV DH,BX+3 MOV DH,[BX+3]

g. INC COUNT 改正 MOV BX,COUNT INC BX (符号常数不能加1)

h. MOV NB,S2 改正 MOV AL,S2 MOV NB,AL(两个内存变量不能直接传送)

i. MOV AX,[BX+S1] 改正 MOV AX,WORD PTR [BX+S1]

j. ADD AX,[DX+NW] 改正 ADD AX,[BX+NW]

本文来源:https://www.bwwdw.com/article/yrjv.html

Top