发布时间 : 星期四 文章大连理工大学 计算机原理 习题3答案更新完毕开始阅读d2772de6ee06eff9aff80787
习题3:
1、8086系统中,请说明下列指令的源操作数的寻址方式是什么?
1)MOV AX, 1234H 立即寻址 2)MOV AX, [1234H] 直接寻址 3)MOV AX, [BX] 间接寻址 4)MOV AX, 1234H[BX + SI] 相对基址变址寻址 5)MOVSB 数据串寻址 6)IN AL, DX 间接端口寻址
2、请在下表中画出下列数据段以十六进制表示的各单元值(表格中每个单元表示一个字节),并写出变量var1, var2, var3的偏移地址和cnt的值。 data SEGMENT para ORG 30H
var1 DB -2, ‘A’, 2 dup(‘23’) var2 DW -1 cnt EQU $-var1 var3 DW var2 data ENDS
答:var1:0030,var2:0036,var3:0038,cnt=8.
3、以下程序实现将变量var进行var*10+600的操作,并将计算结果保存在变量result中,当程序执行 到地址M5的时候,请在以下表格中画出当前堆栈指针的位置和堆栈里的内容(程序断点可以用标号,在堆栈中可用寄存器名代表保存的内容,SS的内容不用指定,表格的每个单元表示一个字)。(6分) data segment
var dw 1000 result dd ?
高地址 高地址
0030H
低地址
data ends
ss_seg segment stack
db 100 dup(?)
低地址
ss_seg ends
code segment
assume cs:code, ds:data, ss:ss_seg main proc far
push ds mov ax, 0 push ax
mov ax, data mov ds, ax mov ax, var
M1: call Caculate M2: dw 10
M3: dw 600
M4: lea bx, result
mov [bx], ax mov [bx+2], dx ret
main endp Caculate proc
push bp mov
bp, sp
push si push bx mov mov mul M5: add
add mov
bx, [bp+2] si, cs:[bx] si
ax, cs:2[bx] bx, 4 [bp+2], bx
pop pop pop ret Caculate
bx si bp
endp
code ends
end main
答:如下图,此时栈顶指针指向比bx所在单元地址小1的堆栈单元。
DS 00H M2 BP SI BX
高地址
低地址
4、问答题
1)若AL = 81H,则执行指令CBW后AH的内容为多少? 答:AH的内容为FFH.
2)若BL = BEH,执行下列指令序列,则每执行一步,BL和CF的值为多少?
SHL BL, 1 ;BL = __7CH___, CF = _1___ MOV CL, 2
SHR BL, CL ; BL = __1FH___, CF = ___0___ OR BL, 80
SAR BL, 1 ; BL = __CFH___, CF = ___1___ ROR BL,CL ; BL = ___F3H__, CF = ___1___ INC CL
RCL BL, CL BL = ___9FH__, CF = ____1__ 3)什么是短跳转、近跳转、远跳转?
答,短跳转,是段内直接跳转,把IP的内容加上一个字节的补码数作为新的IP,跳转范围为-128~127.
近跳转,是段内直接跳转,把IP的内容加上一个字的补码数作为新的IP,跳转范围为-32768~32767. 远跳转,是段间直接跳转。
4)若当前SP = 1000H,CS = B000H ,IP = 0100H,且当前FLAG = 2345H,则执行指令INT 21H以后,SP的值变为多少?堆栈段中6个存储单元0FFFH、0FFEH、0FFDH、0FFCH、0FFBH、0FFAH的值分别是多少? 答
:
SP=0FFAH,(0FFFH)=23H,(0FFEH)=45H,(0FFDH)=B0H,(0FFCH)=00H,(0FFB)=01H,(0FFA)=00H.
5、请写出程序段实现下列功能
例如:从160H端口读取1个字节 MOV DX, 160H IN AL, DX 1)
将一个8位数20H写入到地址为20H的端口; 答:MOV AL, 20H
OUT 20H, AL
2)
若AL = 56H, BL = 57H,将这两个压缩格式BCD码相加并将结果保存到存储单元[2000H]中; 答:ADD AL, BL
DAA
MOV [2000H], AL
3)
将2个32位无符号数DAT1和DAT2相乘,结果保存在64位无符号数中,请编写程序段。 mov ax, data mov ds, ax lea si, result sub ax, ax