第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小时内删除。