汇编语言程序设计的题目,谢谢高手指点啊。

2025-01-08 01:22:36
推荐回答(2个)
回答1:

; 本程序通过编译,运行正确

Code Segment
Assume CS:Code,DS:Code

ADR1 db 15H,23H,35H,46H,97H ;5个字节压缩BCD码
Elements equ ($-ADR1)/Type ADR1 ; 数组元素个数
ADR2 dW Elements DUP(?) ;非压缩BCD码

Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段

; 将内存中ADR1开始存放的5个字节的压缩型BCD码拆成非压缩型BCD码,存入ADR2开始的字节单元中。
cld
lea si,ADR1 ;5个字节压缩BCD码数组地址
LEA di,ADR2 ;5个字非压缩BCD码数组地址
mov cx,Elements ; 数组元素个数装入计数寄存器
split: lodsb ;读入一个元素至AL
xor ah,ah
push cx
mov cl,4
shl ax,cl ;压缩BCD码高4位移至AH的低4位
shr al,cl ;将被移到高4位原压缩BCD码低4位移回低4位,完成拆分
pop cx
stosw ;保存拆分好的非压缩BCD码
loop split

Exit_Proc: mov ah,4ch ;结束程序
int 21h

Code ENDS
END Start ;编译到此结束

回答2:

;本程序调试正确.
data segment
ADR1 db 15H,23H,35H,46H,97H ;5个字节压缩BCD码
Count equ $-ADR1 ; 数组元素个数
data ends
ext segment
ADR2 dw Count dup(?) ;非压缩BCD码
ext ends
code segment
assume cs:code,ds:data,es:ext
start:
mov ax,data
mov ds,ax
mov ax,ext
mov es,ax
cld
lea si,ADR1 ;5个字节压缩BCD码数组地址
lea di,ADR2 ;5个字非压缩BCD码数组地址
mov cx,count ; 数组元素个数装入计数寄存器
next:
lodsb ;读入一个元素至AL
mov ah,al
and ah,0fh ;拆出低位
shr al,1
shr al,1
shr al,1
shr al,1 ;拆出高位
stosw ;保存拆分好的非压缩BCD码
loop next
mov ah,0
int 16h
mov ah,4ch ;结束程序
int 21h

code ends
end start ;编译到此结束