第五章 汇编语言程序设计
- 格式:doc
- 大小:54.00 KB
- 文档页数:6
第五章汇编语言程序设计
一、程序分析题
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中
HLT
3.在DAT单元内有一个带符号的数X,编一程序段,根据X的情况进行如下处理:
若X为正奇数,则将X与BUF单元内容相加;
若X为正偶数,则将X与BUF单元内容相‘与’;
若X为负奇数,则将X与BUF单元内容相‘或’;
若X为负偶数,则将X与BUF单元内容相‘异或’。
解:这是一个多分支结构程序,要对正负数判断,还要对奇偶数进行判断。
正负数判断看最高位是否为
‘1’,为‘1’是负数,否则为正数。
奇偶判断是对D0位进行判断,若为‘1’,则为奇数,否则为偶数。
MOV AL,DAT
AND AL,DAT
JNS POSI ;若为正数转POS1
TEST AL,01H ;测试负数的奇偶性
JZ M ;若为负偶数转M
OR AL,BUF ;若为负奇数进行‘或’运算
JMP DONE
M:XOR AL,BUF ;负偶数进行‘异或’运算
JMP DONE
POSI:TEST AL,01H ;判断正数的奇偶性
JZ N ;为正偶数,转N
ADD AL,BUF ;为正奇数进行‘加’运算
JMP DONE
N:AND AL,BUF ;正偶数进行‘与’运算
DONE:MOV BUF,AL
HLT
4.从NUMB单元起有100个数,其值在0一100之间。
试编程序实现以下数据统计:
(1)统计大于60小于100的数据个数,统计结果存于C0单元。
(2)统计等于100的数据个数,统计结果存于C0+1单元。
(3)统计等于0的数据个数,统计结果存于C0十2单元。
(4)当小于60的数等于10个时,结束统计,同时置C0单元为0FFH。
解:这是一个典型的多分支带循环的问题。
应首先确定算法流程。
其流程图和编程如下:
MOV CX,0064H ;长度送CX
LEA BX,NUMB ;100个数的首地址送BX
MOV AX,0 ;清AH,AL
MOV CO,AX ;清C0,C0+1单元
MOV [CO+2],AX ;清C0+2,C+3单元
LP:MOV AL,[BX];取数
CMP AL,100 ;与100比较
JZ L100 ;若等于100,转L100 CMP AL,60;
JNC L60 ;若AL)=60,转L6。
INC AH ;AL<60,计数器加1
CMP AH,10 ;<60为10个时
JZ DONE1 ;转DONE1执行
OR AL,AL;
JZ LO ;若AL=0,转LO执行
JMP NEXT
L100:INC [C0+1];数100的个数加1 JMP NEXT
L60:INC C0
JMP NEXT
LO:INC C0十2 ;AL=0,零计数器加1 NEXT:INC BX
LOOP LP
JMP DONE
DONEI:MOV C0,0 FFH
DONE:HLT。