;以X为首址的字单元中的数据依次为1234H、5678H ;以Y为首址的字单元中的数据依次为8765H、4321H
LEA LEA MOV MOV ADD ADC CMP JL CMP JL JMP
L1: MOV
JMP
L2: MOV EXIT:……
SI,X DI,Y DX,[SI+2] AX,X AX,X DX,[SI+2] DX,[DI+2] L2 AX,Y L1 EXIT AX,1 EXIT AX,2
答:执行结果为(AX)=2,(DX)=0ACF0H。
26.设VAR字单元的值为x,F1字单元的值为y,试编程按以下要求给y赋值:
2
x>30
y =
0 30≥x≥1
x<1
-2
答:一种可能的程序段实现如下:
MOV AX,VAR ;AX CMP AX,30 JG
PLUS2 ;x>30,则转PLUS2
x
CMP AX,1 JL
MIN2
;x<1,则转MIN2
MOV F1,0 ;30≥x≥1,y=0 JMP GO
PLUS2:MOV F1,2 ;y=2
JMP
GO
MIN2: MOV F1,-2 ;y = -2或00FEH GO:……
;后续处理
简析:本例中并未说明VAR字节单元是带符号数还是无符号数,读者在使用判断转移指令时可任意选用。若当作带符号数,应使用JG、JL、JGE、JLE等指令,如参考程序;若当作无符号数,则应使用JA、JB、JAE、JBE等指令。
第四章 80x86汇编语言程序设计
习题与答案
1、指出以下数据定义伪指令所分配的字节数(8086系统)。 (1)DATA1 DB 10,?,‘A’
(2)DATA2 DW 10 DUP(2,3 DUP(?),1) (3)DATA3 DB ‘HELLO,WORLD!’,‘$’ (4)DATA4 DW DATA4
解:(1)3字节; (2)100字节; (3)13字节; (4)2字节。
2、指出以下数据定义伪指令所分配的字节数(80386系统)。 (1)DATA1 DF 12,34,56 (2)DATA2 DF DATA2
(3)DATA3 DQ 0,10 DUP(?) (4)DATA4 DT 0,1,2
解:(1)18字节;
3、指出以下指令中哪些是无效的,并说明原因。 (1)ADDR (2)DATA (3)1_DATA (4)@VAR (5)MOV (6)MOV 解:
(1)非法,地址计数器$是32位数;
(2)非法,以字母开头的16进制数应在前面加“0”,即应为“0F0H”;
DB $ DB F0H,12H DW 1234H DW VAR1
;VAR1为一个字节变量
(3)6字节;
(3)88字节; (4)30字节。
AX,[10-VAR1] ;VAR1为一个字变量 BX,[VAR2*2+1] ;VAR2为一个字变量
(3)非法,变量名非法,不能以数字开头; (4)合法;
(5)非法,地址表达式不能是“常数-地址”; (6)非法,地址表达式不能出现乘法。
4、假设已定义数据段如下: DATA
SEGMENT ORG
100H
10 DUP(1,2,3) DATA1,$
DATA1 DB DATA2 DW DATA
ENDS
且段寄存器DS已初始化为该数据段的段基址(假设段基址为1234H)。请指出以下指令执行后,相应的寄存器中的内容。 (1)MOV (2)MOV (3)MOV (4)MOV (5)MOV (6)MOV (7)MOV (8)MOV 解:
(1)(AX)=0201H; (2)(BX)=0100H; (3)(CX)=0120H; (4)(DX)=011EH; (5)(SI)=1234H; (6)(DI)=000AH; (7)(SP)=0001H; (8)(BP)=0002H。
5、在8086系统下,编写完整程序,实现从键盘上输入8位二进制数,从显示器上显示相应的16进制数,例如从键盘上输入“00010010”,应在显示器上显示“12H”。
AX,WORD PTR DATA1 ;(AX)=? BX,DATA2 CX,DATA2+2
;(BX)=? ;(CX)=?
DX,OFFSET DATA2 ;(DX)=? SI,SEG DATA1
;(SI)=?
DI,LENGTH DATA1 ;(DI)=? SP,TYPE DATA1 BP,SIZE DATA2
;(SP)=? ;(BP)=?