2024年4月27日发(作者:)
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,[BP][SI]
MOV AX,[BX+1234H]
MOV AX,[BX+SI-1234H]
3.3 设:(DS)=2000H,(BX)=0100H,(SS)=1000H,(BP)=0010H,TABLE的
物理地址为2000AH,(SI)=0002H。求下列每条指令源操作数的存储单元地址:
MOV
MOV
MOV
MOV
AX,[1234H]
AX,[BX]
AX,TABLE[BX]
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
⑵ JMP
NEAR PTR
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
【解】:⑴ JMP FAR
⑵ JMP
ARRAY
PTR NEXT 此转移指令的目标转移地址为:31000H
DWORD ARRAY 此转移指令的目标转移地址为:30300H
3.7下列每组指令有何区别?
⑴ MOV
MOV
AX,1234H
AX,[1234H]
AX,TABLE
AX,TALBE
⑵ MOV
MOV
AX,TABLE
AX,[TABLE]
AX,BX
AX,[BX]
⑶ MOV
LEA
⑷ MOV
MOV
【解】:⑴ 第一条指令中,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
SP→2000AH
SP→20008H 34H
20009H 12H
2000AH
SP→20006H
20007H
20008H
20009H
2000AH
78H
56H
34H
12H
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
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假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是
非法的?它们的错误是什么?
⑴ MOV BP,AL ⑵ MOV WORD_OP[BX+4*3][DI],SP
⑶ MOV WORD_OP1,WORD_OP2 ⑷ MOV AX,WORD_OP1[DX]
⑸ MOV SAVE WORD,DS ⑹ MOV SP,SS:DATA_WORD[BX][SI]
⑺ MOV [BX][SI],2 ⑻ MOV AX,WORD_OP1+WORD_OP2
⑼ MOV AX,WORD_OP1-WORD_OP2+100 ⑽ MOV WORD_OP1,WORD_OP1-WORD_OP2
【解】:⑴ MOV BP,AL 两个操作数不匹配
⑵ MOV WORD_OP[BX+4*3][DI],SP
⑶ MOV WORD_OP1,WORD_OP2 两个内存单元之间不能直接传送数据
⑷ MOV AX,WORD_OP1[DX]
⑸ MOV SAVE WORD,DS
⑹ MOV SP,SS:DATA_WORD[BX][SI] 当基址为BX时,选取DS寄存器
⑺ MOV [BX][SI],2
⑻ MOV AX,WORD_OP1+WORD_OP2
⑼ MOV AX,WORD_OP1-WORD_OP2+100
⑽ MOV WORD_OP1,WORD_OP1-WORD_OP2
4.2假设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误之处:
⑴ ADD VAR1,VAR2 ⑵ SUB AL,VAR1
⑶ JMP LAB[SI] ⑷ JNZ VAR1
⑸ JMP NEAR LAB
【解】:⑴ ADD VAR1,VAR2
ADD两个操作数不能同时为存储单元,
MOV AX, VAR1
ADD AX, VAR2
⑵ SUB AL, VAR1
两个操作数不匹配
SUB AX, VAR1
⑶ JMP LAB[SI]
LAB与[SI]不能相加
JMP WORD, PTR [SI]
⑷ JNZ VAR1
JNZ后面应是标号,不应是变量
JNZ LAB
⑸ JMP NEAR LAB
缺少PTR运算符
JMP NEAR PTR LAB
4.3画图说明下列语句所分配的存储空间及初始化的数据值。
⑴ BYTE_VAR DB ‘BYTE’,12,-12H,3 DUP(0,?,2 DUP(1,2),?)
⑵ WORD_VAR DW 5 DUP(0,1,2),?,-5,‘BY’,‘TE’,256H
【解】:(1)
BYTE_VAR
41H
59H
54H
45H
0CH
F4H
00H
-
01H
02H
01H
B
Y
T
E
12
-12H
0
1
2
1
2
WORD_VAR
00H
00H
01H
00H
02H
00H
…
00H
00H
01H
00H
02H
00H
-
-
0
1
2
30个字节
0
1
2
02H
00H
-
01H
02H
01H
02H
00H
-
01H
02H
01H
02H
0
1
2
1
2
0
1
2
1
2
2
FBH
FFH
41H
00H
59H
00H
54H
00H
45H
00H
56H
02H
-5
B
Y
T
E
256H
4.4写出将首地址为BLOCK的字数组的第6个字送到CX寄存器的指令序列,要求分
别使用以下几种寻址方式:
⑴ 以BX的寄存器间接寻址
⑵ 以BX的寄存器相对寻址
⑶ 以BX、SI的基址变址寻址
【解】不同的寻址方式可以有不同的指令组合。
⑴ 以BX的寄存器间接寻址
LEA BX,BLOCK+10 ;将第6个字的有效地址存入BX
NOV CX,[BX] ;以BX的寄存器间接寻址方式,将第6个字送入CX寄存器
⑵ 以BX的寄存器相对寻址
MOV BX,10 ;将第6个字的地址偏移量存入BX
MOV CX,BLOCK[BX] ;以BX的寄存器相对寻址方式,将第6个字送入CX寄存器
⑶ 以BX、SI的基址变址寻址
LEA BX,BLOCK ;取首地址BLOCK存入BX
MOV SI,10 ;将第6个字的地址偏移量存入SI
MOV CX,[BX+SI] ;以BX、SI的基址变址寻址方式,将第6个字送入CX寄存器
4.5假设程序中的数据定义如下:
PARTNO DW ?
PNAME DB 16 DUP (?)
COUNT DD ?
PLENTH EQU $-PARTNO
问PLENTH的值为多少? 它表示什么意义?
【解】:PLENTH的值为22,它表示数据的个数。
4.6有符号定义语句如下:
BUFF DB 1,2,3,‘123’
EBUFF DB 0
L EQU EBUFF-BUFF
问L的值是多少?
【解】:PLENTH的值为6。
4.7 假设程序中的数据定义如下:
LNAME DB 30 DUP(?)
ADDRESS DB 30 DUP(?)
CITY DB 15 DUP(?)
CODE-LIST DB 1,7,8,3,2
⑴ 用一条MOV指令将LNAME的偏移地址放入AX。
⑵ 用一条指令将CODE_LIST的头两个字节的内容放入SI。
⑶ 写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。
【解】: ⑴ 用一条MOV指令将LNAME的偏移地址放入AX。
MOV AX, OFFSET LANME
⑵ 用一条指令将CODE_LIST的头两个字节的内容放入SI。
MOV SI, WORD PTR CODE_LSIT
⑶ 写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。
CODE_LENGHT EQU CITY-CODE_LIST
4.8试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,
2,5和4放在10字数组DATA_LIST的头5个单元中。然后,写出完整的代码段,其功能
为:把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。
【解】:参考程序如下:
DATA_SEG SEGMENT
DB1 DB 5
DATA_LIST DB -1, 0, 2, 5, 4, 5 DUP(?)
COUNT DB 5
MAX DB ?
MIN DB ?
DATA_SEG ENDS
CODE_SEG SEGMENT
ASSUME CS:CODE_SEG, DS:DATA_SEG
START PROC FAR
PUSH DS
MOV AX, 0
PUSH AX
MOV AX, DATA_SEG
MOV DS, AX
LEA BX, DATA_LIST
MOV CX, COUNT-1
MOV AL, [BX]
MOV AH, [BX+1]
LOOP1: INC BX
CMP AH, AL
JAE LOOP1
XCHG AH, AL
LOOP2 INC BX
CMP AH, [BX]
JAE LIS
XCHG AH, [BX]
JMP LOP2
LIS: CMP AL , [BX]
JBE LOP2
XCHG AL, [BX]
LOOP2
MOV MAX, AH
MOV MIN, AL
RET
START ENDP
CODE_SEG ENDS
END START
4.9给出等值语句如下:
ALPHA
BETA
GAMMA
EQU
EQU
EQU
100
25
2
下列表达式的值是多少?
⑴ ALPHA*100+BETA
⑵ ALPHA MOD GAMMA+BETA
⑷ (BETA/3) MOD 5
⑹ ALPHA GE GAMMA
⑻ GAMMA OR 3
⑶ (ALPHA+2)*BETA-2
⑸ (ALPHA+3)*(BETA MOD GAMMA)
⑺ BETA AND 7
【解】: ⑴ ALPHA*100+BETA 100×10025=10025
⑵ ALPHA MOD GAMMA+BETA 100/(25+2)=19
⑶ (ALPHA+2)*BETA-2 (100+2)*25=2548
⑷ (BETA/3) MOD 5 (25/3) MOD 5=3
⑸ (ALPHA+3)*(BETA MOD GAMMA) (100+3)*(25 MOD 2)=103
⑹ ALPHA GE GAMMA 100 GZ GAMMA=0FFFFH
⑺ BETA AND 7 25 AND 7=1
⑻ GAMMA OR 3 2 OR 3=3
4.10对于下面的数据定义,三条MOV指令分别汇编成什么?(可用立即数方式表示)
TABLEA DW
TABLEB DB
TABLEC DB
┇
MOV
MOV
MOV
AX,LENGTH TABLEA
BL,LENGTH TABLEB
CL,LENGTH TABLEC
MOV AX, OOOAH
MOV BL, 0AH
MOV CL, O1H
10 DUP(?)
10 DUP(?)
’1234’
【解】: MOV AX,LENGTH TABLEA
MOV BL,LENGTH TABLEB
MOV CL,LENGTH TABLEC
4.11对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?
FLDB
TABLEA
TABLEB
DB
DW
DB
?
20 DUP(?)
‘ABCD’
⑵ MOV AX,TYPE ⑴ MOV AX,TYPE FLDB
TABLEA
⑶ MOV CX,LENGTH TABLEA ⑷ MOV DX,SIZE TABLEA
⑸ MOV CX,LENGTH TABLEB
(1) MOV AX,TYPE FLDB 【解】:
(2) MOV AX,TYPE TABLEA
(3) MOV CX,LENGTH TABLEA
(4) MOV DX,SIZE TABLEA
(5) MOV CX,LENGTH TABLEB
(AX)= 1
(AX)= 2
(CX)= 20
(DX)= 40
(CX)= 1
4.12编写在屏幕上显示字符串‘THIS IS TEXT DISPLAY PROGRAM.’的程序。
【解】:分析:只需将欲显示字符串的ASCII码存放到字节变量数据区(字节变量数据区
发布者:admin,转转请注明出处:http://www.yc00.com/web/1714183443a2397735.html
评论列表(0条)