大连理工大学 计算机原理 习题3答案 联系客服

发布时间 : 星期四 文章大连理工大学 计算机原理 习题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