第3章 80X86指令系统
习题与思考题
1. 指出下列各指令中源操作数和目的操作数的寻址方式:
⑴ MOV BX,WORD PTR[2200H] ⑵ AAA
⑶ JUM 2200H ⑷ LES DI,[2100H]
⑸ MOV [BX+SI+8], BX
解答
⑴ MOV BX, WORD PTR[2200H]
源操作数:直接寻址;目的操作数:寄存器寻址
⑵ AAA
源操作数:寄存器寻址AL(也称隐含寻址);目的操作数:寄存器寻址
⑶ JUM 2200H
程序转移段内直接寻址方式
⑷ LES DI,[2100H]
源操作数:直接寻址;目的操作数:寄存器寻址
⑸ MOV [BX+SI+8], BX
源操作数:寄存器寻址;目的操作数:基址加变址寻址
2. 若AX=0ABCDH,BX=7F8FH,CF=1。 求分别执行8086 CPU指令
⑴ ADD AX,BX ⑵ ADC AX,BX
⑶ SBB AX,BX ⑷ NEG AX
⑸ AND AX,BX ⑹ OR AX,BX
⑺ XOR AX, BX ⑻ IMUL BL
后,AX寄存器中的内容,并指出标志寄存器SF,ZF,AF,PF,CF及OF的状态。
解答
⑴ AX=2B5CH, SZAPCO=001110B
⑵ AX=2B5DH, SZAPCO=001010B
⑶ AX=2C3DH, SZAPCO=001001B
⑷ AX=5433H, SZAPCO=001110B
⑸ AX=2B8DH, SZAPCO=00X100B
⑹ AX=FFCFH, SZAPCO=10X100B
⑺ AX=D222H, SZAPCO=10X100B
⑻ AX=3283H, SZAPCO=XXXX11B
3. 若AL=78H,BL=87H,
⑴求执行指令
ADD AL,BL
DAA
之后,AL=?、标志AF=?、CF=?
⑵ 若执行指令 SUB AL,BL与DAS后,AL=?、标志AF=?、CF=?
解答
⑴ AL=65H, AF=1, CF=1。
⑵ AL=91H, AF=0, CF=1。
4. 指出下列指令中哪些是错误的,并指出错在何处?
⑴ MOV DL,[DX] ⑵ MOV ES,2000H
⑶ SUB [BX],[SI] ⑷ ADD AX,[BX+CX]
⑸ XCHG DS,[2400H] ⑹ DEC 15H
⑺ IN AL,DX ⑻ OUT 300H,AX
解答
⑴ 错,DX不能作为间接寻址的寄存器。
⑵ 错,立即数不能直接送给段寄存器。
⑶ 错,两个存储单元间内容不能直接相减。
⑷ 错,CX寄存器不能作为变址寄存器。
⑸ 错,不允许段寄存器与存储单元内容进行交换
⑹ 错,减1指令不能对段寄存器直接操作
⑺ 对
⑻ 错,输出指令的地址若是16位,必须用DX间址。
5. 下列程序段执行后 AX=?
设数据段有: TABLE DW 100,200,300,400
ENTRY DW 3
代码段 对DS初始化
MOV BX,OFFSET TABLE
MOV SI,ENTRY
MOV AX,[BX+SI]
执行后 AX=2C00
6. 将AL中的8位二进制数按倒序方式重新排列,即AL原来为D7D6…D0,倒序后AL=D0D1…D7。
参考答案
…
MOV CX, 8
L: SHL AL, 1
RCR BL, 1
LOOP L
MOV AL, BL
…
7.若起始地址偏移量为2000H的内存单元存放有100个ASCII码字符,现给这些字符添加奇偶校验位(bit7),使每个字符中“1”的个数为偶数,在顺序输出到地址为100H的端口。
解答
MOV SI, 2000H
MOV CX, 100
MOV DX, 100H
NEXT2: MOV AL, [SI] ;取字符串中字符送AL
AND AL, 0FFH ;改变标志位
JPE NEXT1 ;“1”的个数为偶,bit7不变
OR AL, 80H ;“1”的个数为奇,bit7变为1
NEXT1: OUT DX, AL
INC SI
LOOP NEXT2
MOV AH, 4CH
INT 21H
8. 若SS=1000H,SP=2000H,AX=1234H,BX=5678H,FR=2115,试说明执行指令
PUSH AX
PUSH BX
PUSHF
完成字符串是什么 POP CX
POP DX
之后,SP=? SS=? CX=? DX=? 并画图指出堆栈中各单元的内容。
解答: SS=1000H
SP=1FFEH
CX=2115H
DX=5678H
栈中各单元内容如下所示:
地址 | RAM |
11FFAH | 2115 |
11FFCH | 5678 |
11FFEH | 1234 |
12000H | |
第4章 宏汇编语言
习题与思考题
1.画出以下变量在内存中存储的示意图。
D1 DB ‘A’,’123’,09H, 45
D2 DW ‘A’,’CD’,23H, 4567H
D3 DD 1234H, 23456789H
2.设计子程序分别完成以下功能:
1)根据给定的参数值,判断该参数是偶数还是奇数。
2)把给定参数值的高、低数据位互换。
3.设计相应的宏完成以下功能:
1)把给定的参数按二进制显示。
2)求两个参数的和,并按十进制形式显示。
第5章 汇编语言程序设计
习题与思考题
1. 设数据段中有字节型单元NUMBER和FLAG,判断NUMBER与给定的X和Y的大小关系(X<Y),若NUMBER>Y,则置FLAG=1,若NUMBER<X,则置FLAG=-1,否则置FLAG=0。
解答:.486
Data segment
NUMBER db ?
FLAG db ?
Data ends
Code segment
Assume cs: Code, ds: Data
Beg: mov ax,data
Mov ds,ax
mov al, X
Mov bl, Y
Cmp NUMBER, X
Jnc P1
Mov FLAG, 0FFH
Jmp exit
P1: cmp NUMBER, Y
Ja P2
Mov FLAG, 00H
Jmp exit
P2: mov FLAG, 01H
Exit: mov ah, 4ch
Int 21h
Code ends
End Beg
2. 计算1+2+3+…+100,并把和保存在SUM单元中。
.486
DATA SEGMENT USE16
TT DB 1
SUM DW ?
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG: MOV AX , DATA
MOV DS, AX
MOV CX, 100
MOV AX, 0
START: ADD AX, TT
INC TT
LOOP START
MOV SUM, AX
MOV AH, 4CH
MOV 21H
CODE ENDS
END BEG
3. 对一个给定的N数据,用冒泡排序法进行排序。
解答:.486
Data segment
Buf db ‘abcd18437hj’
Lens equ $-buf
Count db lens
Flag db ?
Data ends
Code segment
Assume cs: code, ds: data
Beg: mov ax, data
Mov ds, ax
Again: dec count
Jz done
Mov flag, 0
Mov cx, count
Mov si, offset buf
Last: mov al, [si]
Mov ah, [si+1]
Cmp ah, al
Jnc next
Mov [si], ah
Mv [si+1], al
Mov flag, 1
Next: inc si
Loop last
Cmp flag, 1
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论