3.1机器指令分为哪几部分?每部分的作用是什么?
【解】:每条机器指令由两部分组成:操作码字段和地址码字段。操作码字段:用来说明该指令所要完成的操作。地址码字段:用来描述该指令的操作对象。一般是直接给出操作数,或者给出操作数存放的寄存器编号,或者给出操作数存放的存储单元的地址或有关地址的信息。
3.2指出下列MOV指令的源操作数的寻址方式。
MOV    AX1234H
MOV    AXBX
MOV    AX[BX]
MOV    AXTABLETABLE  TABLE是一个变量名
MOV    AX[1234H]
MOV    AX[BX+1234H]
MOV    AX[BP][SI]
MOV    AX[BX+SI1234H]
【解】:MOV    AX1234H                            立即寻址
MOV    AXBX                                    寄存器寻址
MOV    AX[BX]                                寄存器间接寻址
MOV    AXTABLETABLE是一个变量名            直接寻址方式
MOV    AX[1234H]                                直接寻址方式
MOV    AX[BX+1234H]                            寄存器相对寻址
MOV    AX[BP][SI]                                基址变址寻址
MOV    AX[BX+SI1234H]                        相对基址变址寻址
3.3  设:(DS=2000H,(BX=0100H,(SS=1000H,(BP=0010HTABLE的物理地址为2000AH,(SI=0002H。求下列每条指令源操作数的存储单元地址:
MOV    AX[1234H]
MOV    AX[BX]
MOV    AXTABLE[BX]
MOV    AX[BP]
MOV    AX[BP][SI]
【解】:源操作数存储单元地址:(DS)×10H + EA =2000H×10H+1234H=21234H
源操作数存储单元地址:(DS)×10H +(BX)=2000H×10H+0100H=20100H
源操作数存储单元地址:(DS)×10H+EA=2000H×10H+0100H+000AH=2010AH
源操作数存储单元地址:(SS)×10H+EA=1000H×10H+0010H=10010H
源操作数存储单元地址:(SS)×10H+EA=1000H×10H+0010H+0002H =10012H
3.4ARRAY是字数组的首地址,写出将第5个字元素取出送AX寄存器的指令,要求使用以下几种寻址方式:
直接寻址  寄存器间接寻址  寄存器相对寻址  基址变址寻址
【解】:⑴ 直接寻址  寄存器间接寻址 寄存器相对寻址  基址变址寻址
      MOV AX, ARRAY+8  MOV BX, ARRAY+8  MOV BX, 8          LEA BX, ARRAY
                        MOV AX, [BX]      MOV AX, ARRAY[BX]  MOV SI, 8 
                                                              MOV AX,[BX+SI]
3.5 设当前(CS)=2000H(IP)=2000H,标号NEXT定义在当前代码段偏移地址为0100H处,(DS)=1000H(BX)=1000H(11000H)=00H(11001H)=30H,数据段定义的字变量ARRAY的内容为1000H,试写出下列转移指令的目标转移地址。
JMP    NEAR    PTR
JMP    BX
JMP    WORD    PTR    ARRAY
【解】:⑴ JMP    NEAR    PTR          此转移指令的目标转移地址为:20100H
⑵ JMP    BX                  此转移指令的目标转移地址为:21000H
⑶ JMP    WORD    PTR    ARRAY    此转移指令的目标转移地址为:23000H
3.6设当前(CS)=2000H(IP)=2000H,标号NEXT定义在3000H1000H处。当前(DS)=1000H(BX)=1000H(11000H)=00H(11001H)=03H(11002H)=00H(11003H)=30H,数据段定义的字变量ARRAY的内容为0300H(ARRAY+2)=3000H,试写出下列转移指令的目标转移地址。
  JMP    FAR            PTR        NEXT
  JMP    DWORD        ARRAY
【解】:⑴ JMP    FAR        PTR        NEXT    此转移指令的目标转移地址为:31000H
⑵ JMP    DWORD    ARRAY          此转移指令的目标转移地址为:30300H
3.7下列每组指令有何区别?
    MOV        AX1234H                    MOV    AXTABLE
    MOV        AX[1234H]                    MOV    AX[TABLE]
    MOV        AXTABLE                    MOV    AXBX
LEA        AXTALBE                    MOV    AX[BX]
【解】: 第一条指令中,1234H就是源操作数,直接送入AX中,第二条指令中,1234H是源操作数的地址,该指令是把1234H所指示的地址单元的值送入AX中。
两条指令都是直接寻址方式,都是把TABLE指示的地址单元的值送入AX中。
第一条指令中,TABLE为一地址单元的地址,该条指令是把TABLE所指示的地址单元的值送入AX中,第二条指令是把源操作数的偏移地址送入AX中。
第一条指令为寄存器寻址方式,BX中的值为源操作数,该条指令是把BX中的值送入AX中,第二条指令是寄存器间接寻址方式,BX中的值为源操作数的地址,该条指令是把BX所指示的地址单元的值送入AX中。
3.8 MOV    CSAX指令正确吗?
【解】:MOV    CS,AX指令不正确。因为CS是指令寄存器,由系统自动改变,不能由指令进行更改。
3.9写一指令序列将3456H装入DS寄存器。
【解】:MOV AX 3456H
        MOV DS AX
3.10若正在访问堆栈中的03600H单元,则SSSP的值各是多少?
【解】:若正在访问堆栈中03600H单元,则SS和SP的值会有好多组合,其中可以有SS是0300H,SP是0600H。
3.11  (SS)=2000H(SP)=000AH,先执行将字数据1234H5678H压入堆栈的操作,再执行弹出一个字数据的操作,试画出堆栈区及SP的内容变化过程示意图(标出存储单元的物理地址)
【解】:物理地址=(SS)×10H+SP
3.12  解释XLAT指令是怎样转换AL寄存器中的内容的,并编写一段程序用XLAT指令将BCD09转换成对应的ASCII码,并将ASCII码存入ARRAY中。
【解】:XLAT指令是将AL的内容替换成存储单元中的一个数,往往用于代码转换。使用此指令前,先在数据段建立一个表格,表格首地址存入BX寄存器,欲取代码的表内位移量存入AL寄存器中。XLAT指令将(AL)值扩展成16位,与(BX)相加形成一个段偏移地址,段地址取(DS),据此读出代码送入AL寄存器。
程序如下:TABLE DB 30H, 31H, ┅, 39H
                ARRAY DB 1O DUP(?)
                MOV  CL, 10
                MOV  SI, 0
                MOV  BX, OFFSET TABLE
                XOR  AL, AL
          AGAIN: XLAT
                MOV  [SI], AL
                INC  SI
                INC  AL
                LOOP  AGAIN
3.13能用ADD指令将BX内容加到ES中去吗?
解】:不可以。ADD指令不允许使用段寄存器。
3.14 INC  [BX]指令正确吗?
解】:正确。操作数在BX所指示的地址单元中。
3.15(AX)=0001H(BX)=0FFFFH,执行ADD  AXBX之后,标志位ZFSFCFOF各是什么?    解】:(AX)= 0001H =  0000 0000 0000 0001 B
    +  (BX)=0FFFFH =  1111 1111 1111 1111 B
        (AX)= 0001H = 1 0000 0000 0000 0000 B  则:ZF=1SF=0CF=1OF=0
3.16 写一指令序列完成将BL中的数据除以CL中的数据,再将其结果乘以2,并将最后为16位数的结果存入DX寄存器中。
解】:MOV  AL  BL
        DIV  CL
        MOV  CL  1
汇编table指令什么意思
        SAL  AL  CL
        SAL  AH  CL
        MOV  DX  AX
3.17写一指令序列,完成将AX寄存器的最低4位置1,最高3位清0,第789位取反,其余位不变的操作。
【解】:  OR  AX, 000FH  (OR  AX, 0000 0000 0000 1111 B)
            AND  AX, 1FFFH  (AND AX, 0001 1111 1111 1111 B)
            XOR  AX, 01C0H  (XOR AX, 0000 0001 1100 0000 B)
3.18  试写出执行下列指令序列后AX寄存器的内容。执行前(AX)=1234H
      MOV  CL7
  SHL      BXCL
【解】:(AX) = 1234H = 0001 0010 0011 0100 B
      执行后:(AX) = 0 0011 0100 0000 000 B = 0001 1010 0000 0000 B = 1A00H
3.19 写一指令序列把DXAX中的双字左移三位。
解】: MOV  CL  3
        SAL  DX  CL
        SAL  AX  CL
4 汇编语言程序设计
4.1假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么?

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