15
P189 4.10 下下下下下下下下下下下下下下下 10 下下下下下下 下下下下下下下下下 BCD 下下下下下下 AH 下下 AL 下下 下下下下下下下下下下下下下下下 )。。 XOR BX BX LOP MOV AH 01H INT 21H MOV AH BH ADD AL BL MOV BX AX LOOP LOP 下下下 下下下下下下下下 MOV CX 10 AAA AND AL 0FH 下下

P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

  • 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

Page 1: P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

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 ;纠错

Page 2: P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

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

Page 3: P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

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 中是 $ 出现的次数。

Page 4: P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

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

Page 5: P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

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

Page 6: P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

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

Page 7: P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

P192 4.20

在 A1 单元开始定义了一长度为 N 的字符串,找出其中所有的小写字母存入到以 A2 开始的存贮区中。统计出小写字母的个数,存放到 SL 单元中。请编一完整的源程序。

数据段如下:

DATA SEGMENT

A1 DB‘ASdDpKrJadldjFefASDEF’

N EQU $-A1

A2 DB N DUP (?)

SL DB ?

DATA ENDS

第四章 汇编语言程序设计习 题 课

Page 8: P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

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: …………

Page 9: P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

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 

Page 10: P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

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

第四章 汇编语言程序设计习 题 课

Page 11: P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

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

Page 12: P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

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

Page 13: P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

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

Page 14: P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

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

Page 15: P189 4.10 下面的程序是实现从键盘输入十个一位10进制数后累加。最后累加和以非压缩 BCD 码形式存放在 AH( 高位)和 AL( 低位)中。 试把程序段中所空缺的指令填上。

课后作业:1. P192 4.20 4.23 4.22