第五章 汇编语言程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章汇编语言程序设计
一、程序分析题
1 .MOV AL,10
ADD AL,AL
SHL AL,1
MOV BL,AL
ADD AL,BL
问:AL= BL=
解: AL=50H(或80)BL=28H(或40)
2. MOV BX,00FFH
AND BX,0FFFH
OR BX,0F0FH
XOR BX,00FFH
问:BX=
解:2. BX=0F00H
3. XOR AX,AX
MOV BX,2
MOV CX,10
LP:ADD AX,BX
ADD BX,2
LOOP LP
HLT
(1)该程序的功能是什么?
(2)程序执行后,AX= BX= CX=
解:(1)求2~20间的偶数和。(完成累加求和,即求:2+4+6+8+10+12+14+16+18+20)。(2)AX=110,BX=22,CX=0
4.设DS=1000H,有如下数据段:
DATA SEGMEN
ORG 10011
Xl DW 11H,22H,33H
X2 DB 33H,44H,55H
Y1 EQU 4321H
Y2 EQU $- X2
X3 DB 88H,99H
DATA ENDS
(1)该数据段共占用多少字节的存储单元?
(2) Y1和Y2的值为多少?X3的值是多少?
解:(1)该数据段共占用11个字节
(2)Yl =4321H,Y2=3,X3=109H这里X3是用DB定义的,它是变量名。它的偏移地址为109H。Y1和Y2是由EQU定义的,它们是符号名,是常量。
5.下列程序段执行后,寄存器AX、BX和CX的值各为多少?
ORG 1200H
DA1 DW 100
┆
MOV AX,DA1
MOV BX,0FFSET DA1
MOV CL,BYTE PTR DA1+1
MOV CH,TYPE DA1
HLT
解: AX=0064H BX=1200H CX=6400H
6.有数据段如下:
DATA SEGMENT
ORG 1200H
BUF DB 5,6,‘78’
X1 DW 1,37H,46H
Y1 EQU X1-BUF
DATA ENDS
(1)该程序段占有的存储单元字节数是多少?
(2)Y1的值是多少?
解:(1)占10个字节单元(2)Y1=2
二、程序填空题
1. AX中有一个无符号数,若其值小于100,就加100;若其值大于等于100,就减50,但计算结果仍保存在AX中。在下面程序段每一空白处填上一条适当指令,以实现其功能。
CMP AX,100
SUB AX,50
PP:ADD AX,100
DONE:HLT
解:第一空白处填JC PP
第二空白处填JMP DONE
2.下面程序段判断A单元的值,并根据其值是负数、0或正数,分别将0FFH,00H,01H送入AL中。在空白处填入适当指令。
MOV AL,A
CMP AL,0
JZ SYM
MOV AL,OFFH
JMP DONE
SYM:MOV AL,1
DONE:HLT
解:第一个空填JZ DONE,因为程序已经给AL赋值,若AL等于0的话,AL中放的结果值也为0,所以转DONE即可。第二个空应填TEST AL,80H,因为其下面一条指令是JE SYM,其上一条指令应能影响ZF标志位,所以使用测试指令;即为0时(正数时)转SYM,给AL赋1。为非零时,即为负数时AL赋OFFH。
所以答案为:JZ DONE或JE DONE
TEST AL,80H或AND AL,80H
3.对于符号函数
请在下面程序段中每一空白处填上一条适当指令,实现符号函数功能。
MOV AL,X
CMP AL,0
MOV Y,1
AA:JL BB
MOV Y,0
BB:MOV Y,0FFH
DONE:HLT
解:第一空处填:JLE AA
第二空处填:JMP DONE
第三空处填:JMP DONE
三、编制程序
1.写出完成下列功能的程序段:
(1)在数据段中,字变量DAT1有两个数据:1122H和3344H,字变量DAT2有两个数据:5566H和7788H,字变量DAT3为两个空单元。
(2)将DAT1的第二个字数据传送到AX。
(3)将AX内容与DAT1的第一个字数据相减,将其差存人到DAT3的第一个字单元中。
(4)将DAT2中的第一个字送AX,并与DAT2中第二个字相加,其和存于DAT2的第一个字单元中。(5)将DAT2中的字单元数据除以DAT3第一个字单元中的数据,其商存于DAT3的第二个字单元中。
解: DATA SEGMENT
DAT1 DW 1122H,3344H
DAT2 DW 5566H,7788H
DAT3 DW ?,?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START;MOV AX,DATA
MOV DS,AX
MOV AX,DAT1+2
SUB AX,DAT1
MOV DAT3,AX
MOV AX,DAT2
ADD AX,DAT2+2
MOV DAT2,AX
CWD
IDIV DAT3
MOV DAT3十2,AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
2.在DAT和DAT1两个字节变量单元中有两个十进制数的ASCII码,编程实现将这两个ASCII码转换为两个BCD码,并以压缩形式存放在REST字节变量单元中。
解:MOV AL,DAT
SUB AL,30H ;将ASCⅡ码转为BCD码
MOV CL,4
SHL AL,CL ;将BCD码放在AL高四位中
MOV BL,DAT1
SUB BL,30H ;将DAT1中的ASCⅡ码转为BCD码
OR AL,BL ;将两个BCD码合并在AL寄存器中
MOV REST,AL ;将压缩形式的BCD码存入REST中