汇编程序:一个字的压缩BCD码加、减法

1.什么是一个字的压缩BCD码加,减法?2.完整的程序3.程序最好有附注说明~~~~~~不用调整指令。。。。... 1.什么是 一个字的压缩BCD码加,减法?
2.完整的程序
3.程序最好有附注说明~~~~~~
不用调整指令。。。。
展开
 我来答
做而论道
高能答主

2009-11-24 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
使用什么CPU?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
汤旺河边
2009-11-25 · TA获得超过2.9万个赞
知道大有可为答主
回答量:2675
采纳率:0%
帮助的人:2975万
展开全部
压缩型BCD码是一个字节存放二个BCD码,低四位和高四位都是一个BCD码。一个字的压缩BCD码,就是4个压缩BCD码。
两个字节压缩BCD码的加、减运算后,要用对应的调整指令调整AL的值;两个字压缩BCD码的加、减运算,不仅要用对应的调整指令调整AL的值,还要考虑进位或借位的问题。如,
6745H+2389H=9134H,涉及到低字节向高字节进位的问题
6745H-2389H=4356H,涉及到低字节向高字节借位的问题

不用调整指令的完整程序:
; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。
Code Segment
Assume CS:Code,DS:Code
; -------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -------------------------------------
; 功能:把一个字的压缩BCD码转换成十六进制数
; 入口:AX=字压缩BCD码
; 入口:AX=十六进制数
PackedBCD_HEx Proc Near
push dx
push cx
push bx
push bp
xor bx,bx ;十六进制数初值
mov bp,1000 ;千位基数
mov cx,3
@@Multiple: push cx
mov cl,4 ;逻辑移位次数
rol ax,cl ;循环左移
push ax
and ax,0fh ;屏蔽高12位
mul bp ;乘以基数
add bx,ax ;累加
mov ax,bp
mov bp,10
div bp
mov bp,ax
pop ax
pop cx
loop @@Multiple
mov cl,4 ;逻辑移位次数
rol ax,cl ;循环左移
and ax,0fh ;屏蔽高12位
add ax,bx
pop bp
pop bx
pop cx
pop dx
ret
PackedBCD_HEx EndP
; -------------------------------------
; 功能:把一个字的十六进制数转换成压缩BCD码
; 入口:AX=十六进制数
; 入口:AX=字压缩BCD码
HEx_PackedBCD Proc Near
push dx
push cx
push bx
push bp
xor bx,bx ;压缩BCD码初值
mov bp,1000 ;千位基数
mov cx,3
@@Division: push cx
xor dx,dx ;被除数高位字
div bp ;除以基数
mov cl,4 ;逻辑移位次数
shl bx,cl ;左移
or bx,ax ;累加
push dx ;入栈保存余数
xor dx,dx ;被除数高位字
mov ax,bp
mov bp,10
div bp
mov bp,ax
pop ax ;弹出余数
pop cx
loop @@Division
mov cl,4
shl bx,cl
or ax,bx
pop bp
pop bx
pop cx
pop dx
ret
HEx_PackedBCD EndP
; -------------------------------------
BCD_Code dw 6745h,2389h ;两个字的压缩BCD码
Resault_Add dw ? ;和
Resault_Sub dw ? ;差
Press_Key db 7,13,10,13,10,'The complated. Press any key to exit...$'
Start: push cs
pop ds
mov ax,BCD_Code ;读取一个字的压缩BCD码
call PackedBCD_HEx ;把一个字的压缩BCD码转换成十六进制数
mov Buffer,ax ;保存
mov ax,BCD_Code[2] ;读取另一个字的压缩BCD码
call PackedBCD_HEx
mov Buffer[2],ax
add ax,Buffer ;加上另一个数
mov Resault_Add,ax ;保存和
mov ax,Buffer ;读取第一个字数据
sub ax,Buffer[2] ;减去第二个字数据
mov Resault_Sub,ax ;保存差
; 若要求以十六进制形式保存结果,到此就算完成了;
; 若要求结果仍然以压缩BCD码的形式保存,则要把十六进制数转换为压缩BCD码
mov ax,Resault_Add ;读取十六进制和
call HEx_PackedBCD ;把一个字的十六进制数转换成压缩BCD码
mov Resault_Add,ax ;保存
mov ax,Resault_Sub ;读取十六进制差
call HEx_PackedBCD
mov Resault_Sub,ax
; -------------------------------------
Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序
mov ah,1
int 21h
mov ah,4ch ;结束程序
int 21h
Buffer dw ?,? ;数据缓冲区
Code ENDS
END Start ;编译到此结束
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式