1. 8086汇编语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快?
寄存器寻址最快
7. 下面这些指令哪些是正确的?哪些是错误的?如是错误的,请说明原因。
XCHG CS , AX ;不能修改CS
MOV [BX] , [1000] ;不能在两个内存单元之间直接进行数据传送
XCHG BX , IP ;不能用名字直接访问IP
PUSH CS
POP CS ;不允许直接修改CS值
IN BX , DX ;输入数据必须使用累加器AL或AX
MOV BYTE [BX] , 1000 ;格式错误,且超范围,应为MOV word PTR [BX],1000
MOV CS , [1000];不允许直接修改CS值
20.带参数的返回指令用在什么场合?设栈顶地址为3000H,当执行RET 0006后,SP的值为多少?
利用堆栈传递参数时使用;对于近调用SP=3008H,对于远调用SP=300AH
27.设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶地址为多少?当执行
PUSH BX指令后,栈顶地址和栈顶2个字节的内容分别是什么?
栈顶地址:SS:SP,物理地址为:2FF00H;PUSH 完以后栈顶地址为:SS:SP=2010:FDFEH,即物理地址为:2FEFEH,内容为:57H 34H(由低地址到高地址)
B P7
5. 设(DS)=3000H,(BX)=1100H,(CS)=0062H,(S1)=0002H,(31100H)=52H,
(31101H)=8FH,(31162H)=6BH,(31163H)=99H,(31103H)=F6H,
(32200H)=AAH,(32201H)=B6H,(32800H)=55H,(32801H)=77H,给出下列各指令执行后AX寄存器的内容:
(1) MOV AX,BX (2) MOV AX,[BX]
(3) MOV AX,4200H (4) MOV AX,[2800H]
(5) MOV AX,1100H[BX] (6) MOV AX,[1160H+SI]
9. 分别执行下列各指令组,写出AX的内容:
(1) MOV AX,93A4H
NEG AX
73A4-8c5c,e689-1977
(AX)=6C5CH
(2) XY DW "AB"
MOV AX,XY
(AX)=4142H
(3) MOV AX,2B7EH
MOV CX,4DB5H
ADD AX,CX
(AX)=7933H
(4) XA DW 0BD57H
MOV AX,0FBCDH
AND AX,XA
(AX)=B945H
(5) STC
MOV BX, 0B69FH
MOV AX, 43A2H
SBB AX, BX
(6) MOV AX, 3537H
MOV BL, 39H
ADD AL, BL
AAA
(AX)=3606H
(7)XY DB "AB"
MOV AX, WORD PTR XY
(AX)=4241H
10. 找出下列指令中所有对的指令,写出题号,错误的请说明原因。
(1) MOV DS,2010H (2) PUSH AL
(3) MOV DX,[SP] (4) IN AL,0A00H
(5)XCHG CL,CH (6) SHR AX,3
(7) AAA CX (8) ADD [EBP+DI],[1000H] (9) OUT DX,CL (11) ADD 03ECH,AX
(12) MOV BX,[SI+DI] (14) LDS CH,[DI]
(15) LEA BX,1000H (16) DIV 0010H
(18) MUL AX,200H (19) MOV AX,[BX+BP] (20) CMP [BX],[SI] (21) MUL 24h
(22) OUT DX,BX (23) AND 0FH,AL
(24) SAL [BX],CX (25) MOVS
(26) JMP FAR [BX+SI] (27) JNZ AAA
(29) SBC AX,[DX]
17.读程序段,回答问题。
(1) IN AL,82H (2)IN AL,82H
XOR AH,AH MOV BL,0AH
ADD AX,AX IMUL BL
MOV BX,AX
MOV CX,2
SHL BX,CL
ADD AX,BX
问:1.程序段(1)的功能是什么?
将82H端口输入的字节乘以10后放在ax中
2.若从82H端口读人的数据为05H,完成程序段(1)后(AX)=?
(ax)=0032H
3.若读入的字节为A5H,完成程序段(1)后,(AX)=?
(ax)=0672h
又问程序段(1)与程序段(2)的功能是否相同(忽略BX的变化)?
不相同,(1)做的时无符号数的乘法,而(2)做的是符号数的乘法
4.用最简单的指令完成与(1)相同的功能,请写出这些指令。
IN AL,82H
MOV BL,10
MUL BL
25.比较AX,BX,CX中有符号数的大小,将最大的数放在AX中,请编程。
CODE SEGMENT
ASSUME CS:CODE
START:
MOV AX,1243H
MOV BX,892AH
MOV CX,9922H
CMP AX,BX
JGE NEXT
XCHG AX,BX
NEXT: CMP AX,CX
JGE NEXT2
XCHG AX,CX
NEXT2:MOV AH,4CH
INT 21H
CODE ENDS
END START
附加:用汇编编程在屏幕上显示字符串“Hello world!”.
参考程序:
DATA SEGMENT
PROMPT DB 'Hello world!',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
LEA DX,PROMPT
MOV AH,09H
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS
END START
1.读程序,并标明内存中数据段的相关地址和内容。
(7)DATA SEGMENT
BUFFER DB 3 DUP (0)
A D
B 41H
LA EQU $
B DW 'AB'
LB EQU $
BYTEB EQU BYTE PTR B
C D
D 41424344H
LC EQU $
WORDC EQU WORD PTR C
DATA ENDS CODE SEGMENT
ASSUME DS:DATA, ES:DATA, CS:CODE
START
PROC FAR
MOV AX ,DATA
MOV DS , AX
MOV ES ,AX LEA SI ,BUFFER MOV [ SI ],BYTEB INC SI
MOV [ SI ],WORDC ADD LA[ SI ],LB ADD LB[ SI ],LC MOV
AH ,4CH
INT 21H
START ENDP CODE
ENDS
END
START
内 存 初 始 状 态
内 存 最 终 状 态
题五(1)图。