3.1机器指令分为哪几部分?每部分的作用是什么?
【解】:每条机器指令由两部分组成:操作码字段和地址码字段。操作码字段:用来说明该指令所要完成的操作。地址码字段:用来描述该指令的操作对象。一般是直接给出操作数,或者给出操作数存放的寄存器编号,或者给出操作数存放的存储单元的地址或有关地址的信息。
3.2指出下列MOV指令的源操作数的寻址方式。
MOV AX,1234H
MOV AX,BX
MOV AX,[BX]
MOV AX,TABLE;TABLE ;TABLE是一个变量名
MOV AX,[1234H]
MOV AX,[BX+1234H]
MOV AX,[BP][SI]
MOV AX,[BX+SI-1234H]
【解】:MOV AX,1234H 立即寻址
MOV AX,BX 寄存器寻址
MOV AX,[BX] 寄存器间接寻址
MOV AX,TABLE;TABLE是一个变量名 直接寻址方式
MOV AX,[1234H] 直接寻址方式
MOV AX,[BX+1234H] 寄存器相对寻址
MOV AX,[BP][SI] 基址变址寻址
MOV AX,[BX+SI-1234H] 相对基址变址寻址
3.3 设:(DS)=2000H,(BX)=0100H,(SS)=1000H,(BP)=0010H,TABLE的物理地址为2000AH,(SI)=0002H。求下列每条指令源操作数的存储单元地址:
MOV AX,[1234H]
MOV AX,[BX]
MOV AX,TABLE[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.4设ARRAY是字数组的首地址,写出将第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定义在3000H:1000H处。当前(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 AX,1234H ⑵ MOV AX,TABLE
MOV AX,[1234H] MOV AX,[TABLE]
⑶ MOV AX,TABLE ⑷ MOV AX,BX
LEA AX,TALBE MOV AX,[BX]
【解】:⑴ 第一条指令中,1234H就是源操作数,直接送入AX中,第二条指令中,1234H是源操作数的地址,该指令是把1234H所指示的地址单元的值送入AX中。
⑵ 两条指令都是直接寻址方式,都是把TABLE指示的地址单元的值送入AX中。
⑶ 第一条指令中,TABLE为一地址单元的地址,该条指令是把TABLE所指示的地址单元的值送入AX中,第二条指令是把源操作数的偏移地址送入AX中。
⑷ 第一条指令为寄存器寻址方式,BX中的值为源操作数,该条指令是把BX中的值送入AX中,第二条指令是寄存器间接寻址方式,BX中的值为源操作数的地址,该条指令是把BX所指示的地址单元的值送入AX中。
3.8 MOV CS,AX指令正确吗?
【解】:MOV CS,AX指令不正确。因为CS是指令寄存器,由系统自动改变,不能由指令进行更改。
3.9写一指令序列将3456H装入DS寄存器。
【解】:MOV AX 3456H
MOV DS AX
3.10若正在访问堆栈中的03600H单元,则SS和SP的值各是多少?
【解】:若正在访问堆栈中03600H单元,则SS和SP的值会有好多组合,其中可以有SS是0300H,SP是0600H。
3.11 若(SS)=2000H,(SP)=000AH,先执行将字数据1234H和5678H压入堆栈的操作,再执行弹出一个字数据的操作,试画出堆栈区及SP的内容变化过程示意图(标出存储单元的物理地址)。
【解】:物理地址=(SS)×10H+SP
3.12 解释XLAT指令是怎样转换AL寄存器中的内容的,并编写一段程序用XLAT指令将BCD码0~9转换成对应的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 AX,BX之后,标志位ZF、SF、CF、OF各是什么? 【解】:(AX)= 0001H = 0000 0000 0000 0001 B
+ (BX)=0FFFFH = 1111 1111 1111 1111 B
(AX)= 0001H = 1 0000 0000 0000 0000 B 则:ZF=1、SF=0、CF=1、OF=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,第7、8、9位取反,其余位不变的操作。
【解】: 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 CL,7
SHL BX,CL
【解】:(AX) = 1234H = 0001 0010 0011 0100 B
执行后:(AX) = 0 0011 0100 0000 000 B = 0001 1010 0000 0000 B = 1A00H
3.19 写一指令序列把DX与AX中的双字左移三位。
【解】: MOV CL 3
SAL DX CL
SAL AX CL
第4章 汇编语言程序设计
4.1假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论