汇编语言程序设计ppt课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• MOV AX,0908H • AAD
进制转换
• 进制转换过程中经常利用代码转换。
• DISP PROC
• MOV CX,8
• LAST:MOV DL,'0'
• RCL BL,1
• JNC NEXT
• MOV DL,'1'
• NEXT:MOV AH,2
• INT 21H
• LOOP LAST
• RET
• DISP ENDP
• CODE ENDS

END BEG
[COM格式程序清单]
应用程序示例
代码转换
• 代码转换是程序设计中的常见问题。 • • 由于涉及到键盘输入、屏幕显示、打印机输出
等I/O操作往往都是处理字符的ASCII码值; • 作为对比:在计算机内部,指令运算的对象和
结果都是二进制编码:一串0、1代码。
• 输出显示的格式可能是二进制数、十进制数或 者十六进制数,所以很多场合都要进行代码转 换。

RCL BL,1

JNC NEXT

MOV DL,'1'
• NEXT:MOV AH,2

INT 21H

LOOP LAST

RET
• DISP ENDP
• CODE ENDS

END START
• 就本例而言,COM文件体积为110个字节,而 EXE文件为625个字节。
• 显然,COM文件比EXE文件大大节省了空间。
• CODE
• • BEG: •
SEGMENT USE16 ASSUME CS:CODE,DS:DATA MOV AX,DATA
MOV DS,AX
• MOV AH,9
• MOV DX,OFFSET MESG1
• INT 21H
• MOV AH,1
• INT 21H
;输入一个字符
• CMP AL,39H
• OR AL,BL •
否改为XOR或ADD • MOV Y,AL
;初始化DS ;取BCD码的高4位数
;取BCD码的低4位 ;合并结果 ;能
;存BCD码到Y单元
• RET • START ENDP
• CODE
• 结束
ENDS
END START
;源程序
[例] 把一个字单元的4位BCD码转换成二进制数。
;代码段
• START PROC FAR • PUSH DS • MOV AX,0 • PUSH AX
;定义FAR类型过程 ;预留返回DOS地址
• MOV AX,DATA • MOV DS,AX
• MOV AL,X • MOV CL,4 • SHL AL,CL
• MOV BL,X+1 • AND BL,0FH

JMP EXIT
• ERROR:MOV AH,9

MOV DX,OFFSET MESG2

INT 21H
• EXIT:MOV AH,4CH

INT 21H
• ;-----------------------------------------
• DISP PROC

MOV CX,8
• LAST:MOV DL,'0'
• [例] 把两个字节存储单元X和X+1中低4位存储的两个0到9之 间的数(非压缩BCD码) 合并成一个压缩BCD码,结果存放到
字节单元Y中。
• 解:程序如下:
• DATA SEGMENT
;数据段
• X DB '5','7'
• Y DB ?
பைடு நூலகம்
• DATA ENDS
• CODE SEGMENT • ASSUME CS:CODE,DS:DATA
• .486
• CODE SEGMENT USE16

ASSUME CS:CODE

ORG 100H
• START:JMP BEG
• MESG1 DB 'Please Enter!',0DH,0AH,'$'
• MESG2 DB '---Error!$'
• BEG: MOV AH,9

MOV DX,OFFSET MESG1

INT 21H

MOV AH,1

INT 21H

CMP AL,39H

JA ERROR

CMP AL,30H

JB ERROR

SUB AL,30H

MOV BL,AL

MOV AH,2

MOV DL,'='

INT 21H

CALL DISP

MOV AH,2
• MOV DL,'B'

INT 21H
• MOV AH,4CH

INT 21H
• MUL10 PROC

MOV DX,10

MUL DX

ADD AX,BX
• 始终为0
;乘积的高16位存放在DX,

RET
• MUL10 ENDP
• CODE ENDS

END BEG
• 特例:一个不大于99的BCD数可以直接用AAD 指令求出等值的二进制数。
[例]把键盘上输入的一位十进制数(ASCII码)以二进 制方式显示(ASCII码) 。
• [EXE格式程序清单]
• DATA SEGMENT USE16 • MESG1 DB 'Please Enter!',0DH,0AH,'$' • MESG2 DB '---Error!$' • DATA ENDS
• JA ERROR
;如果大于39H则出错
• CMP AL,30H
• JB ERROR 错
;或JC:如果小于30H同样出
• SUB AL,30H
;或AND AL,0FH
• MOV BL,AL
• MOV AH,2 • MOV DL,'=' • INT 21H • CALL DISP • MOV AH,2 • MOV DL,'B' • INT 21H • JMP EXIT • ERROR:MOV AH,9 • MOV DX,OFFSET MESG2 • INT 21H EXIT:MOV AH,4CH • INT 21H
• CODE SEGMENT USE16

ASSUME CS:CODE

BCD_NUM DW 4567H
• ; 4567H = {7+10*(6+10*(5+10*(4+10*0) ) )}
• BEG:MOV CX,4

MOV AX,0 ;存放中间结果
• AGAIN:ROL BCD_NUM,4

MOV BX,BCD_NUM

AND BX,000FH ;依次取出BCD_NUM的千、
百、十、个位的BCD码

CALL MUL10

LOOP AGAIN
• DISP:MOV BP,AX

MOV CX,16
• LAST:MOV AL,'0'

RCL BP,1

ADC AL,0

MOV AH,0EH

INT 10H

LOOP LAST
相关文档
最新文档