求一个汇编语言程序

来源:百度知道 编辑:UC知道 时间:2024/07/01 02:14:03
用子程序设计的方法,分别把BUF字单元中的四个十六进制数转换为ASCLL代码存入MAS开始的单元中,并在crt上显示。

小胖过奖了。发现有疏漏之处,刚改完重贴过来。

; 下面的程序是16位汇编,编译通过,运行正确。

; Program Name: Hex_ASCII.asm

Hex_ASCII SEGMENT
ASSUME CS:Hex_ASCII,DS:Hex_ASCII
ORG 100H

Start: jmp Begin

BUF DW 1234,4321,6789,9876 ;4个十六进制数
MAS DB 21 dup(?) ;转换成相应的ASCII码

AL_ASCII Proc Near
cmp al,9 ;AL>9?
ja Letter ;AL>9,按大写字母处理
or al,30h ;AL<=9,按数字处理
jmp Save_Chr
ret
Letter: sub al,9 ;字母,AL减9
or al,40h ;转换成相应的大写字母
Save_Chr:
stosb ;保存转换完的字符
ret
AL_ASCII EndP

Begin: lea si,BUF ;32位数首地址→SI
lea di,MAS ;字符串首地址→DI
mov cx,4 ;一共要处理4个字
cld ;清方向标志,使源变址寄存器SI增值
Repeat: lodsw ;读入一个字→AX
push cx ;入栈保存计数寄存器
mov cx,4
mov bl,al ;保存这个字的低位字节(内存中,一个字的低位字节在前,高位字节在后)
xchg ah,al ;交换,先处理高位字节
xor ah,ah ;将AH置0
shl ax,cl ;将AX左移4位
shr al,cl ;将AL右移4位
xchg ah,al ;交换AH、AL
call AL_ASCII ;调用子程序,将AL中的值转换成相应的ASCII码 <