实验1-1——多字节数的运算
⑴、两个长度为3个字节(3B)的二进制无符号数,分别存放在首地址为buf1和buf2的连续内存单元中,编程求这两者之和,并将结果放在起始地址为res的内存单元中。例如,这两个数据为888888H、456789H,则其和应为[1]345671H。
源代码如下:
.model small
.model small
.stack
.data
buf1 dd 888888h
buf2 dd 456789h
res dd 0h
.code
start: mov ax,***@data
mov ds,ax
mov ax,word ptr buf1;取buf1的低16位
add ax,word ptr buf2;取buf2的低16位+buf1的低16位
mov word ptr res,ax;相加结果存入res
mov ax,word ptr buf1+2;取buf1的高16位
adc ax,word ptr buf2+2;取buf2的高16位+buf1的高16位+CF
mov word ptr res+2,ax;相加结果存入res
;输出
mov cx,3 ;置循环初值
mov si,2
again: mov dl,byte ptr res[si];依次取res的两个字节,由高到低
push cx ;保护循环值cx
mov cl,4
shr dl,cl ;将dl高四位移到低四位
pop cx
or dl,30h ;将dl高四位转化为ASCII
cmp dl,39h ;判断是否大于10
jbe next1
add dl,7 ;加7转化为A到E字母输出
next1: mov ah,2
int 21h
mov dl,byte ptr res[si]
and dl,0fh ;将dl高四位清零
or dl,30h; ;将dl低四位转化为ASCII
cmp dl,39h
jbe next2
add dl,7
next2: mov ah,2
int 21h
dec si
loop again
mov ax,4c00h
int 21h
end start
运行结果截图
⑵、将两数改为3B的压缩BCD码,重复以上实验过程。例如,这两个数据为888888H、456789H,则其和应为[1]345677H(表示[1]345677)。
源代码如下:
.model small
.model small
.stack
.data
buf1 dd 888888h
buf2 dd 456789h
res dd 0h
.code
start: mov ax,***@data
mov ds,ax
mov al,byte ptr buf1 ;取buf1的低8位
add al,byte ptr buf2 ;取buf2的低8位+buf1的低8位
daa ;调整为十进制
mov byte ptr res,al ;相加结果存入res
mov al,byte ptr buf1+1;取buf1的中间8位
adc al,byte ptr buf2+1;取buf2的中间8位+buf1的中间8位+CF
daa ;调整为十进制
mov byte ptr res+1,al ;相加结果存入res
mov al,byte ptr buf1+2;取buf1的高8位
adc al,byte ptr buf2+2;取buf2的高8位+buf1的高8位+CF
daa ;调整为十进制
mov byte ptr res+2,al ;相加结果存入res
;输出
mov cx,3 ;置循环初值
mov si,2
again: mov dl,byte ptr res[si];依次取res的两个字节,由高到低
push cx ;保护循环值cx
mov cl,4
shr dl,cl ;将dl高四位移到低四位
pop cx
or dl,30h ;将dl高四位转化为ASCII
cmp dl,39h ;判断是否大于10
jbe next1
add dl,7 ;加7转化为A到E字母输出
next1: mov ah,2
int 21h
mov dl,byte ptr res[si]
and dl,0fh ;将dl高四位清零
or dl,30h; ;将dl低四位转化为ASCII
cmp dl,39h
jbe next2
add dl,7
n
汇编程序 来自淘豆网www.taodocs.com转载请标明出处.