习题集解答
第五章 汇编语言程序设计
1.从4000H单元开始定义数据段如下,请画出所定义存储器的分配图。
BUF SEGMENT
DAl DW 3456H
DA2 DB 2 DUP(7,8)
BUF ENDS
答:
存储器的分配图
2.对于习题1的定义,请说明下列每条指令执行后的结果。
1、 MOV AX,SEG DAl
2、MOV AX,SEG DA2
3、MOV BX,OFFSET DAl
4、MOV BX,OFFSET DA2
5、MOV CX,TYPE DAl
6、MOV CX,TYPE DA2
7、MOV DX,LENGTH DAl
8、MOV DX,LENGTH DA2
9、MOV AX,SIZE DAl ‘
10、MOV AX,SIZE DA2
答:1、(AX)=(DS)
2、(AX)=(DS)+2
3、(BX)=4000H
4、(BX)=4002H
5、(CX)=2
6、(CX)=1
7、(DX)=2
8、(DX)=4
9、(AX)=2
10、(AX)=4
3.已知数据定义如下,请计算变量PL的值是多少?
DATA DB ‘AB’
DATAl DB 10 DUP(?)
PL EQU $-DATA
答:PL=DATA+12-DATA=12
字符串截取后四位方法
4.已知A=25、B=15、C=4,请计算下列表达式的值。
(1) A × 50+B (2) A MOD C+B
(3)(A+4)×B-3 (4) B/3 MOD 4
(5)A LE B (6) A XOR 50
答:(1) A × 50+B= 25 × 50+15=1250+15=12515
(2) A MOD C+B=25 MOD 4+15=1+15=16
(3)(A+4)×B-3 =(25+4)×15-3 =1500-3=1497
(4) B/3 MOD 4 =15/3 MOD 4 =5 MOD 4 =1
(5)A LE B =25 LE 15 = 0
(6) A XOR 50 = 25 XOR 50 = 43
5.已知内存DATA单元存放一个字数据,请统计其中含有0的个数,并送人
RESULT单元的程序。
答:程序如下:
DATA1 SEGMENT
DATA DW 1234h
COUNT DB 0
DATA1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA1
START: MOV AX,DATA1
MOV DS,AX
MOV AX,DATA
MOV CX,16
LOP: TEST AX,8000H
JNZ NEXT
INC RESULT
NEXT: ROL AX,1
LOOP LOP
INT 3
CODE ENDS
END START
6.已知从数据段TAB单元开始,顺序存放十六进制数0~F的ASCII码,寄存器AL中的高四位二进制数是0、低四位是1。 请设计程序:用查表指令(XLAT)将寄存器AL中低四位的十六进制数转换为ASCII码。
答:DATA SEGMENT
TAB DB '0123456789ABCDEF'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA BX,TAB
XLAT
INT 3
CODE ENDS
END START
7.已知从数据段BUF单元开始存放一个三字节的带符号数,请设计对其求补的程序。
答:DATA SEGMENT
BUF DB 97H,87H,9AH
RES DB 3 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA BX,BUF
LEA SI,RES
MOV CX,3
LOP: MOV AL,[BX]
XOR AL,0FFH
MOV [SI],AL
LOOP LOP
CLC
LEA SI,RES
MOV CX,3
LOP1: MOV AL,[SI]
ADC AL,0
MOV [SI],AL
LOOP LOP1
INT 3
CODE ENDS
END START
8.已知从数据段BUF单元开始存放字节型的带符号数X和Y,请设计计算Y=6X+8的程序。
答:DATA SEGMENT
BUF DB 97H,87H ;X=97H和Y=87H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AH,0
MOV AL,BUF
SHL AX,1
MOV BX,AX
SHL AX,1
ADD AX,BX
ADD AX,8
MOV BUF+1,AL
MOV BUF+2,AH
INT 3
CODE ENDS
END START
9.已知X、Y是字节型的无符号数,请设计程序计算:
X/4 (0≤x<10)
Y=
X-10 (10≤X<20)
答:程序如下:
DATA SEGMENT
X DB 84H
Y DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,X
CMP AL,10
JAE NEXT
SHR AL,1
SHR AL,1
JMP EN
NEXT: SUB AL,10
EN: MOV Y,AL
INT 3
CODE ENDS
10.已知从数据段BUF单元开始存放15个字节型数据,请设计程序将其中负数和零分别送往MINUS和ZERO开始的存储器单元。
答:程序如下:
DATA SEGMENT
BUF DB 15DUP(?)
MINUS DB 15 DUP(?) ;存放负数
ZERO DB 15 DUP(?) ;存放0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
ORG 100H
START: MOV AX,DATA
MOV DS,AX
LEA BX,BUF
MOV CX,15
LEA SI,MINUS
LEA DI,ZERO
LOP: MOV AL,[BX]
CMP AL,0
JGE PZ
MOV [SI],AL
INC SI
JMP NEXT
PZ: JG NEXT
MOV [DI],AL
INC DI
JMP NEXT
NEXT: INC BX
LOOP LOP
INT 3
CODE ENDS
END START
12.编一程序将字符串STR(长度20字节)中所有"&"用"$"代替。
答:程序如下:
DATA SEGMENT
STR DB 'G674GH&6TR677&74Y&98'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA BX,STR
MOV CX,20
LOP: MOV AL,[BX]
CMP AL,'&'
JNZ NEXT
MOV AL,'$'
MOV [BX],AL
NEXT: INC BX
LOOP LOP
INT 3
CODE ENDS
END START
13.请设计程序,将存储器单元2200~2210H清0、2250H~2260H置1、22AOH~
22BOH置55H。要求写出主程序和子程序。
解:程序如下:
DATA SEGMENT
BUF1 EQU 2200H
BUF2 EQU 2200H
BUF3 EQU 2200H
DATA ENDS
STACK SEGMENT
DB 20 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
BEG PROC FAR
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
LEA BX,BUF1
MOV AL,0
CALL FMOV
LEA BX,BUF2
MOV AL,1
CALL FMOV
LEA BX,BUF3
MOV AL,55H
CALL FMOV
RET
START ENDP
FMOV PROC NEAR
MOV CX,16
LOP: MOV [BX],AL
INC BX
LOOP LOP
RET
FMOV ENDP
CODE ENDS
END BEG
14.编写程序,要求:
(1)键盘键入两个字符串STRING1和STRING2
(2)比较两串所含字符是否完全相同,若相同则显示‘MATCH’,若不相同则显示 ‘NOMATCH’。
解:程序如下:
DATA SEGMENT
STRING1 DB 10
DB ?
DB 10 DUP(?)
STRING2 DB 10
DB ?
DB 10 DUP(?)
XT DB 'MATCH',13,10,'$'
BXT DB 'NO MATCH',13,10,'$'
DATA ENDS
CODE SEGMENT
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论