内容发布更新时间 : 2025/9/20 18:42:00星期一 下面是文章的全部内容请认真阅读。
在堆栈段物理地址为:PA=SS×10H+BP
或者为:PA=SS×10H+BP+SI 或(BP+DI) 举例如下:
MOV AX,[BX+SI] ;在数据段寻址,PA=DS×10H+BX+SI MOV AX,[BP+DI] ;在堆栈段寻址,PA=SS×10H+BP+DI 10.已知:DS=2000H,BX=0300H,SI=0002H,(20300H)=12H,(20301)=34H,(20302H)=56H,(20303H)=78H,(21400H)=2AH,(21401H)=4CH,(21402H)=B7H,(21403H)=65H试说明下列各条指令执行完后AX寄存器的内容。
(1)MOV AX,1400H ;答:执行完该条指令后 AX=1400H (2)MOV AX,BX ;答:执行完该条指令后 AX=0300H (3)MOV AX,[1400H] ;答:执行完该条指令后 AX=4C2AH (4)MOV AX,[BX] ;答:执行完该条指令后 AX=3412H 11.根据以下要求,试写出相应的汇编语言指令。
(1)把BX寄存器和DX寄存器的内容相加,结果存入BX寄存器中。 答:指令为 ADD BX,DX
(2)用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。
答:指令为 ADD AL,[BX+SI]
(3)用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX相加,并把结果存回存储器中。
答:指令为 ADD [BX+0B2H],CX
(4)用位移量为0524H的直接寻址方式把存储器中的一个字与立即数3C5AH相加,并把结果送回该存储单元。
答:指令为 ADD [0524H],3C5AH
12.已知堆栈段寄存器SS的内容是0FF0AH,堆栈指针寄存器SP的内容是0008H,先执行两条把8057H和0F7CH分别进栈的PUSH指令,再执行一条POP BX指令。试画出堆栈区和SP的内容过程变化示意图(标出存储单元的物理地址)。
答:将8057H和0F7CH分别进栈后,SP=0004H,再执行一条POP BX指令后,SP=0006H,
BX=0F7CH。堆栈区和SP的内容过程变化示意图如下:
SP=0004H SP=0006H SP=0008H
SS=0FF0AH
SP →
0FF0A0H 0FF0A1H 0FF0A2H 0FF0A3H 0FF0A4H 0FF0A5H 0FF0A6H 0FF0A7H 0FF0A8H 0FF0A9H 0FF0AAH
××H ××H ××H 7 C H 0 F H SP →
7 C H 0 F H 5 7 H 8 0 H ××H ××H ××H SP →
5 7 H 8 0 H ××H ××H ××H
13.字节扩展指令和字扩展指令用在什么场合?举例说明。 答:用在除法运算中,对带符号数的被除数进行扩展;
例如:当被除数在AX中,除数在BX中时
CDW
IDIV BX
14.写出执行以下计算的指令系列。其中X、Y、Z、R、W均为存放16位带符号数单元的地址。
(1)Z ← W +(Z-X) 答:指令系列如下
MOV AX,Z SUB AX,X ADD AX,W MOV Z,AX
(2)Z ← W -(X+6)-(R-9) 答:指令系列如下
ADD X,6 SUB R,9 MOV AX,W SUB AX,X SUB AX,R MOV Z,AX
(3)Z ←(W×X)/(Y+6),R ← 余数 答:指令系列如下
MOV AX,W IMUL X
MOV BX,Y ADD BX,6 IDIV BX MOV R,DX
(4)Z ←((W-X)/ 5×Y)× 2 答:指令系列如下
MOV AX,W SUB AX,X CDW IDIV 5 IMUL Y IMUL 2
ADD DX,CF MOV Z,AX
15.写出完成以下操作的程序段。假设各变量的值均为用压缩BCD码表示的二位十进制数
(1)U ← V+(S-6) 答:程序如下
MOV AL,S
SUB AL,6 DAS
ADD AL,V DAA
MOV U,AL
(2)U ←(X+W)-(Z-V) 答:程序如下
MOV AL,Z SUB AL,V DAS
MOV BL,AL MOV AL,X ADD AL,W DAA
SUB AL,BL DAS
MOV U,AL
16.移位指令和循环移位指令在执行操作时,有什么差别?在编制乘除法程序中,为什么常用移位指令来代替乘除法指令?试编制一个程序段,实现CX中的数除以4,结果仍放在CX中。
答:逻辑移位指令用于无符号数的移位,左移时,最低位补0,右移时,最高位补0。 算术移位指令用于对带符号数的移位,左移时,最低位补0,右移时,最高位的符号在右移的同时,且保持。
小循环移位指令ROL、ROR是只对目标操作数进行循环,即不含CF的左、右移循环移位。
大循环移位指令RCL、RCR是把标志位CF也包含在循环中的左、右移循环移位。 对于二进制数,左移一位相当于乘二,右移一位相当于除二,所以可以用移位指令来代替乘除法指令。
SAR CX,1 ;CX算术右移一位,除二 SAR CX,1 ;CX算术右移一位,除二 17.在0628H单元处有一条二字节指令JMP SHORT OBJ,如果其中位移量为:① 27H;② 6BH;③ 0C6H,试问转向地址处的值为多少?
答:段内短转移的把当前的IP值(即JMP指令的下一条指令的地址)与指令指定的8位偏移量之和送到IP,使程序运行发生转移。指令中的OBJ是一个带符号的八位偏移量。
当OBJ=27H时,转移的目标地址值为:0651H 当OBJ=6BH时,转移的目标地址值为:0692H 当OBJ=0C6H时,转移的目标地址值为:05F0H
18.带参数的返回指令用在什么场合?设栈顶地址为4000H,当执行RET 0008H后,SP指针的值是多少?
答:当调用程序为子程序提供一定的参数或参数的地址,这些参数是通过堆栈传递给子程序时;在子程序运行结束返回时,这些参数或参数地址已经没有在堆栈中保留的必要。因此,使用带参数的返回指令RET n,以便废弃一些CALL指令执行前入栈的参数。
设栈顶地址为4000H,当执行RET 0008H后,执行SP ← SP+n的操作,SP=4008H。 19.假定AX和BX中内容为带符号数,CX和DX中的内容为无符号数。请用比较指
令和条件转移指令实现以下判断。
(1)若DX的内容高于CX的内容,转去执行EXCEED。 (2)若BX的内容大于AX的内容,转去执行EXCEED。 (3)若CX的内容等于零,转去执行ZERO。
(4)若BX的内容小于等于AX的内容,转去执行EXCEED。 (5)若DX的内容低于等于CX的内容,转去执行EXCEED。 答:① CMP DX,CX JA EXCEED
② CMP BX,AX JG EXCEED ③ CMP CX,0
JZ ZERO ④ CMP BX,AX JLE EXCEED ⑤ CMP DX,CX JBE EXCEED 20.分析下列程序段:
ADD AX,BX JNO L1 JNC L2
SUB AX,BX JNC L3 JNO L4
JMP SHORT L5
如果AX和BX的内容(带符号数)给定如下:
AX BX
(1)B568H 54B7H (2)147BH 80DCH (3)D023H 9FD0H (4)42C8H 608DH (5)B568H 94B7H
问该程序执行完后,程序转向哪里?
答:① AX+BX没有产生溢出,程序转向L1
② AX+BX没有产生溢出,程序转向L1
③ AX+BX产生溢出,产生进位,执行减运算,产生借位,产生溢出,程序转
向L5
④ AX+BX产生溢出,无进位,程序转向L2
⑤ AX+BX产生溢出,产生进位,执行减运算,产生借位,产生溢出,程序转
向L5
21.8086/8088用什么途径来更新CS和IP的值? 答:出栈;转移;过程调用;中断。
22.设IP=3D8FH,CS=4050H,SP=0F17CH。 当执行CALL 2000:0094H后,试指出IP、CS、SP、(SP-1)、(SP-2)、(SP-3)和(SP-4)的值。
答:CS=2000H,IP=0094H;SP=0F78H,(SP-1)= 3DH,(SP-2)=8FH,(SP
-3)=40H,(SP-3)=50H
23.编写一段程序,比较两个5字节的字符串OLDS和NEWS,如果OLDS字符串不同于NEWS字符串,则执行NEW_LESS,否则顺序执行。
答:设字符串OLDS位于数据段,字符串NEWS位于扩展段,程序段如下: LEA SI,OLDS ;取源串首址送SI
LEA DI,NEWS ;取目的串首址送DI CLD ;增址比较 MOV CX,5 ;串长度为5
REPE CMPSB ;相等重复串比较 JNE NEW_LESS ;不相等转移 HLT ;暂停
习题五
1.汇编程序和汇编语言源程序有什么区别?两者的作用是什么? 答:汇编程序是对汇编源程序进行编译的系统程序;汇编源程序是编程人员利用汇编语言为解决某些问题而编写的程序。汇编程序用来对汇编源程序进行编译,从而产生目标代码的;而汇编源程序是用来执行程序动作的语句。
2.汇编语言源程序的语句有哪几种?各自的作用是什么?
答:汇编语言源程序是由指令语句、伪指令语句、宏指令语句组成。
指令语句:产生目标代码,是CPU可以执行的能够完成特定功能的语句。 伪指令语句:在汇编程序对源程序汇编期间由汇编程序处理的操作,它可以完成如处理器选择、定义数据、分配存储区、指示程序结束等功能,但不产生目标代码。
宏指令语句:宏指令语句的目的在于简化汇编语言源程序的书写,不能缩小目标代码文件。
3.标号和变量都有什么属性?各属性的作用是什么? 答:有段属性、偏移地址属性和类型属性。
① 段属性:段属性定义了标号和变量的段起始地址,其值是在某一段寄存器中。 ② 偏移地址属性:该属性表示标号和变量相距段起始地址的字节数,是一个16位无符号数。
③ 类型属性:对于标号而言:用于指出该标号是在本段内引用还是在其它段中引用。标号的类型有NEAR(段内引用)和FAR(段间引用)两种;对变量而言:其类型属性由定义变量的伪指令DB(定义字节型)、DW(定义字型)、DD(定义双字型)等确定。
4.试叙述汇编语言源程序的上机过程。
答:分四步进行 ① 编辑、②汇编、③ 连接、 ④ 调试。
编辑:用编辑程序(例如EDIT.COM)建立扩展名为.ASM的汇编语言源程序文件。 汇编:用汇编程序(例如MASM.EXE)将汇编语言源程序文件汇编成目标程序文件,其扩展名为.OBJ。如果在汇编过程中出现语法错误,根据错误信息提示(如错误位置、错误类型、错误说明),用编辑软件重新调入源程序文件进行修改,直至没有出现语法错误,再进行连接程序。
连接:用连接程序(例如LINK.EXE)把目标程序文件转化成可执行文件,其扩展名为.EXE。
调试:用调试程(例如 DEBUG.EXE)序对可执行文件进行调试,直到无错误为止。 此时的可执行文件在DOS命令下直接执行。
5.已知数据段DATA从存储器02000H单元开始,DATA段的定义如下: