Upload
havyn
View
108
Download
3
Embed Size (px)
DESCRIPTION
第四章 汇编语言程序设计. P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。. XORBX,BX LOP:MOVAH,01H INT 21H MOVAH,BH ADDAL,BL MOVBX,AX LOOP LOP. MOVCX,10. ANDAL,0FH; 纠错. AAA. 第四章 汇编语言程序设计. P189 4.11 - PowerPoint PPT Presentation
Citation preview
P189 4.10
下面的程序是实现从键盘输入十个一位 10 进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH (高位)和 AL (低位)中。 试把程序段中所空缺的指令填上。
XORBX , BX
LOP: MOVAH , 01H
INT 21H
MOV AH , BH
ADDAL , BL
MOV BX , AX
LOOP LOP
第四章 汇编语言程序设计
MOV CX , 10
AAA
AND AL , 0FH ;纠错
P189 4.11
下面的程序段的功能是把 DA1 数据区的数 0~9 转换为 ASCII 码。 试完善本程序段。
DA1 DB 00H , 01H , 02H , 03H , 04H , 05H
DB 06H , 07H , 08H , 09HASCI DB 10H DUP (?)CONT=ASCI-DA1
LEA SI , DA1LEA DI , ASCI
LOP1 : MOV AL , [SI]
MOV [DI] , ALINC SIINC DILOOP LOP1
第四章 汇编语言程序设计
MOVCX , CONT
OR AL , 30H
P190 4.12
BUFF DB ‘ABD$QC%$A…………XYZ‘CONT EQU $-BUFF
……CLDLEA DI,BUFFMOV CX,CONTMOV AL,’$’XOR DX,DX
NEXT: REPNZ SCASB ; 搜索 BUFF 中的“ $”CMP CX,0JZ K1INC DX ;”$” 的个数加 1 JMP NEXT
K1: ……上述程序段运行后, DX 中的值表示的意义是什么?
第四章 汇编语言程序设计
DX 中是 $ 出现的次数。
P190 4.13 设 A , B 是长度为 10 的字节数组,用串操作指令编写程序实现AB 两数组的内容相互交换,试完善本程序。
DATA SEGMENTA DB 1, 2, 3, 4, 5, 6, 7, 8, 9, 0AH
ORG 0010HB DB 0AH, 9, 8, 7, 6, 5, 4, 3, 2, 1DATA ENDS
……
LEA SI, ALEA DI, BMOV CX, 10
LOP: LODSBXCHG AL, [DI]
DEC DISTOSB
INC DILOOP LOP
第四章 汇编语言程序设计
CLD ;增加指令
XCHG DI, SI
XCHG DI, SI
P191 4.14 现有一子程序:第四章 汇编语言程序设计
( 1 )当 AL < 0 且 BL < 0 AL , BL 不变当 AL < 0 且 BL > 0 AL , BL 交换当 AL > 0 且 BL > 0 AL , BL 不变当 AL > 0 且 BL < 0 AL , BL 交换结论: AL , BL 为相反数交换,同号则不变
SUB1 PROCTEST AL , 80HJE PLUSTEST BL , 80HJNE EXITOJMP XCHANGE
PLUS : TEST BL , 80HJE EITO
XCHANGE : XCHG AL , BLEXITO : RET
SUB ENDP
试回答:
( 1 )子程序的功能是什么?
( 2 )如调用子程序前AL=9AH , BL=77H ,那么返回主程序时 AL= ? BL= ?
( 2 ) AL 与 BL 为相反数相互交换,
AL=77H
BL=9AH
DATA SEGMENTBUF DB 58HASC DB ?,?
DATA ENDSCODE SEGMENT
ASSUME CS : CODE , DS : DATA
P192 4.19 编写一完整源程序,将 BUF 字节单元存放的两位 BCD 码,转换为 2 字节的 ASCII 码,并分别存放在 ASC 和 ASC+1 字节单元中。
第四章 汇编语言程序设计
START : MOV AX , DATAMOV DS , AXMOV AL , BUFMOV CL , 4SHR AL , CLOR AL , 30HMOV ASC , ALMOV AL , BUFAND AL , 0FHOR AL , 30HMOV ASC+1 , ALMOV AH , 4CHINT 21H
CODE ENDSEND START
P192 4.20
在 A1 单元开始定义了一长度为 N 的字符串,找出其中所有的小写字母存入到以 A2 开始的存贮区中。统计出小写字母的个数,存放到 SL 单元中。请编一完整的源程序。
数据段如下:
DATA SEGMENT
A1 DB‘ASdDpKrJadldjFefASDEF’
N EQU $-A1
A2 DB N DUP (?)
SL DB ?
DATA ENDS
第四章 汇编语言程序设计习 题 课
DATA SEGMENTA1 DB ‘ASdDpKrJadldjFefASDEF’N EQU $-A1A2 DB N DUP (?)SL DB ?
DATA ENDS
CODE SEGMENTASSUME CS : CODE , DS :
DATASTART: MOV DX , DATA
MOV DS , DXLEA SI,A1LEA DI,A2MOV CX,N
LOP : MOV AL,[SI]CMP AL,'z'JA NEXTCMP AL,’a’JB NEXTMOV [DI], ALINC DIINC SL
NEXT : INC SILOOP LOP
MOV AH,4CHINT 21H
CODE ENDSEND START汇编连接EXA31
a b c …… x y z61H 62H …… 79H 7AH
小写字母
算法 :
CMP AL, 'z‘JA NEXTCMP AL, ’a’JB NEXT MOV [DI], AL
NEXT: …………
DATA SEGMENTA1 DB ‘ASdDpKrJadldjFefASDEF’N EQU $-A1A2 DB N DUP (?)SL DB ?
DATA ENDSCODE SEGMENT
ASSUME CS:CODE,DS:DATASTART: MOV DX , DATA
MOV DS , DXLEA SI,A1LEA DI,A2MOV CX,N
LOP : MOV AL,[SI]CMP AL,'z'JA NEXTCMP AL,’a’JB NEXTMOV [DI], ALINC DIINC SL
NEXT : INC SILOOP LOPMOV AH,4CHINT 21H
CODE ENDSEND START
简化段.MODEL SMALL.DATA
A1 DB ' ASdDpKrJadldjFefASDEF '
N=$-A1A2 DB N DUP(?)SL DB ?
.CODE
.STARTUPLEASI,A1LEADI,A2MOV CX,N
LOP: MOV AL,[SI]INC SICMP AL,'z'JA NEXTCMP AL,’a’JB NEXTMOV [DI],ALINC DIINC SL
NEXT: LOOP LOP.EXITEND
P192 4.21
设在 DAT 单元存放一个 -9~+9 的字节数据,在 SQRTAB 的数据区中存放 0~9 平方值,请用直接查表方法编写一个子程序,在 SQRTAB 中查找出DAT 单元中数据对应的平方值送 SQR 单元。并写出主程序的调用方式。
数据段如下:
DATA SEGMENT
DAT DB -8
SQRTAB DB 0,1,4,9,16,25,36,49,64,81
SQR DB ?
DATA ENDS
第四章 汇编语言程序设计习 题 课
DATA SEGMENTDAT DB -8SQRTAB DB 0,1,4,9,16,25,36,49,64,81SQR DB ?
DATA ENDS
第四章 汇编语言程序设计
CODE SEGMENTASSUME CS:CODE,DS:DATA
MAIN PROCSTART: MOV AX,DATA
MOV DS,AXLEA BX,SQRTABMOV AL,DATCALL SQRPMOV SQR,AL
MAIN ENDPMOV AH,4CHINT 21H
SQRP PROCCMP AL,0JGE NEXTNEG AL
NEXT: XLAT
RETSQRP ENDPCODE ENDS
END START
MAIN
表: BX=SQRTAB
表: AL=DAT
CALL SQRP
保存到 SQR
结束
NEG AL
AL>=0?
查表
返回
SQRP
>=0<0
P192 4.21 简化段伪指令.MODEL SMALL.DATA
DAT DB 4SQRTAB DB 0,1,4,9,16,25,36,49,64,81SQR DB ?
.CODE
.STARTUPMAIN PROC
LEA BX,SQRTABMOV AL,DATCALL SQRPMOV SQR,AL
MAIN ENDP.EXIT
SQRP PROCCMP AL,0JGE NEXTNEG AL
NEXT: XLATRET
SQRP ENDPEND
P192 4.22
编写能完成下列要求的程序 : 测试字节数据 STATUS, 若其中位 1 、 3 、5 有一位是“ 1” ,程序转至 ROUT1
,若有二位是“ 1” ,程序转至ROUT2 ,若三位都是“ 1” ,程序转至 ROUT3 ;若这三位没有一位是“ 1” ,程序转至 ROUT4 。
DATA SEGMENT
STATUS DB 11001010B
ROUT DW ROUT4 , ROUT1
DW ROUT2 , ROUT3
DATA ENDS
第四章 汇编语言程序设计算法:
DL 逻辑右移两位
CF=1 ?
SHL SI , 1
INC SI
开始
DL=STATUS , SI=0 , CX=3
LEA BX , ROUT
CX=0 ?
JMP [BX+SI]
yN
START: MOV DX, DATAMOV DS,DXMOV SI,0MOV CX,3MOV DL,STATUS
NEXT: SHR DL,1SHR DL,1JNC CF1INC SI
CF1: LOOP NEXTLEA BX,ROUTSAL SI,1JMP [BX+SI]
EXIT: MOV AH,4CHINT 21H
第四章 汇编语言程序设计
ROUT1: MOV AL,1JMP EXIT
ROUT2: MOV AL,2JMP EXIT
ROUT3: MOV AL,3JMP EXIT
ROUT4: MOV AL,4JMP EXIT
CODE ENDSEND START
汇编连接EXA32
DL 逻辑右移两位
CF=1 ?
SAL SI , 1
INC SI
开始
DL=STATUS , SI=0 , CX=3
LEA BX , ROUT
CX=0 ?
JMP [BX+SI]
yN
DATA SEGMENTSTATUS DB 1100 1010B
ROUT DW ROUT4 ,ROUT1, ROUT2, ROUT3
DATA ENDSCODE SEGMENT
ASSUME CS:CODE,DS:DATA
课后作业:1. P192 4.20 4.23 4.22