3 8086CPU指令系统字符串长度不能超过32位
1. 写出完成下列要求的变量定义语句:
1)在变量var1中保存6个字变量:4512H4512,-1100/310H65530
2)在变量var2中保存字符串:’BYTE’, ’word’, ’WORD’
3)在缓冲区buf1中留出100个字节的存储空间;
  4)在缓冲区buf2中,保存5个字节的55H,再保存10个字节的240,并将这一过程重复7次;
5)在变量var3中保存缓冲区buf1的长度;
6)在变量pointer中保存变量var1和缓冲区buf1的偏移地址。
解:var1        DW        4512H,4512,-1,100/3,10H,65530
    var2        DB        ’BYTE’,’word’,’WORD’
    buf1        DB        100 DUP?
    buf2        DB        7 DUP5 DUP55H,10 DUP240))
    var3        DB        LENGTH buf1
    pointer    DW    var1,buf1    (或者pointer    DW OFFSET  var1OFFSET  buf1
2. 设变量var1的逻辑地址为01000000,画出下列语句定义的变量的存储分配图:
      var1  DB  12,-1220/64 DUP055H
      var2  DB  ‘Assemble’
      var3  DW  ‘AB’, ‘cd’, ‘E’
      var4  DW  var2
      var5  DD  var2
解:
3. 指令正误判断,对正确指令写出源和目的操作数的寻址方式,对错误指令指出原因(设VAR1, VAR2为字变量, L1为标号):
  1MOV SI100    2MOV BXVAR1[SI]
  3MOV AX, [BX]    4MOV AL, [DX]
  5MOV BP, AL        6MOV VAR1, VAR2
  7MOV CS, AX        8MOV DS, 0100H
  9MOV [BX][SI], 1    10MOV AX, VAR1+VAR2
  11ADD AX, LENGTH VAR1    12OR BL, TYPE VAR2
  13SUB [DI], 78H    14MOVS VAR1, VAR2
  15PUSH 100H    16POP CS
  17XCHG AX, ES    18MOV DS, CS
  19JMP L1+5    20DIV AX, 10
  21SHL BL, 2    22MOV AL, 15+23
  23MUL CX    24XCHG CL, [SI]
  25ADC CS:[0100], AH    26SBB VAR15,154
解:(1MOV SI,100            正确。源:立即数寻址, 目的:寄存器寻址
2MOV BX,VAR1[SI]    正确。源:寄存器相对寻址, 目的:寄存器寻址
3MOV AX,[BX]        正确。源:寄存器间接寻址,目的:寄存器寻址
4MOV AL,[DX]        错误。寄存器间接寻址时,DX, AX, CX不能作地址寄存器
5MOV BP,AL            错误。操作数类型不一致
6MOV VAR1,VAR2        错误。两存储单元之间不能用MOV指令传送数据
7MOV CS,AX            错误。CS不能为目的操作数
8MOV DS,0100H        错误。目的操作数为段寄存器时,源操作数不能为立即数
9MOV [BX][SI]1        错误。指令类型不定。
10MOV AX,VAR1+VAR2      错误。MOV指令中不能完成加法运算
11ADD AX,LENGTH VAR1    正确。源:立即数寻址。目的:寄存器寻址
12OR    BL,TYPE VAR2        正确。源:立即数寻址。目的:寄存器寻址
13SUB [DI],78H                错误。指令类型不定
14MOVS VAR1,VAR2    正确。目的、源均为隐含寻址。操作数仅指出操作数类型
15PUSH    100H        错误。将常数压入堆栈,要通过寄存器来实现
16POP        CS            错误。目的操作数不能为CS
17XCHG    AXES        错误。XCHG指令的操作数不能是段寄存器
18MOV    DSCS        错误。MOV指令不能从段寄存器到段寄存器
19JMP    L1+5        正确。段内直接转移
20DIV        AX10        错误。指令格式错误。
21SHL        BL2        错误。移位指令的移位数为1或者CL
22MOV    AL15+23    正确。源:立即数寻址,目的:寄存器。编译时就处理为38
23MUL    CX        正确。源:寄存器寻址,目的:寄存器寻址
24XCHG    CL[SI] 正确。源:寄存器间接寻址,目的:寄存器寻址
25ADC  CS:[0100],AH    正确。源:寄存器寻址,目的: 直接寻址(数据在代码段中)
26SBB        VAR1-5,154    正确。源:立即数寻址,目的:直接寻址。
4. 说明下列指令对的区别:
(1) MOV AXVAR1          MOV AXOFFSET VAR1
(2) MOV AXVAR2          LEA  AXVAR2
(3) MOV ALLENGTH  VAR1  MOV ALSIZE  VAR1
(4) MOV ALES: [DI]      CMP  AL, [SI]   CMPSB
(5) SHR AL1          SAR AL1
(6) SHR AL1          ROR AL1
(7) ROL BX1          RCL BX1
解:(1MOV    AXVAR1          把变量VAR1对应地址单元中的一个字送入AX
        MOV    AXOFFSET VAR1  VAR1的有效地址的偏移地址送入AX
2MOV    AXVAR2    把变量VAR2对应地址单元中的一个字送入AX
        LEA  AXVAR2      VAR2的有效地址的偏移地址送入AX
3MOV ALLENGTH VAR1  把变量VAR1的长度送入AL

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。