x86汇编语言程序设计-长整数加法
有关x86的汇编语言编程的帖子不多,这里上传一下有关简单长整数加法的x86代码,供大家参考
(1) (sum1.asm)编写一个8位十进制整数(用压缩的BCD码表示)加法, 两个整数保存在NUM1和NUM2中,结果保存在SUM中。用debug显示SUM的内容并截屏。
参考指令: mov,int,add,adc,daa,loop
运行截屏: 
源码:
;num1.asm
data segment
num1 db 23H, 45H, 67H, 89H ;Integer 0x23456789
num2 db 19H, 13H, 25H, 49H ;Integer 0x19132549
sum db 4 dup(?)
data ends
code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds, ax
call main
mov ah,4ch ; 功能:结束程序,返回DOS系统
int 21h ; DOS功能调用
main proc
mov cx, 4
mov si, 3
again:
mov ax,0
mov bx, offset num1
mov al, [bx+si]
mov bx, offset num2
adc al, [bx+si]
daa
mov sum[si], al
dec si
loop again
ret
main endp
code ends
end start
(2) (sum2.asm)从键盘输入两个8位十进制整数,并采用压缩的BCD码保存在NUM1和NUM2中,然后把它们求和并保存在SUM中,最后把SUM的内容显示出来。
参考指令: mov,int,add,adc,daa,loop,shl,and
运行截屏: 
源码:
;num2.asm
data segment
num1 db 4 dup(?)
num2 db 4 dup(?)
sum db 4 dup(?)
data ends
code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds, ax
call addnum ;调用过程add进行加法
call print ;调用过程print进行输出sum值
mov ah,4ch ; 功能:结束程序,返回DOS系统
int 21h ; DOS功能调用
addnum proc
mov cx,4
mov si,0
input1:
mov ah,01h
int 21h
sub al,30h
shl al,1
shl al,1
shl al,1
shl al,1
mov dl,al
mov ah,01h
int 21h
sub al,30h
add dl,al
mov bx, offset num1
mov [bx+si],dl
inc si
loop input1 ;循环读入num1
mov dl,10 ;输出回车换行,回车键ACSII值为10
mov ah,02h
int 21h
mov cx,4
mov si,0
input2:
mov ah,01h
int 21h
sub al,30h
shl al,1
shl al,1
shl al,1
shl al,1
mov dl,al
mov ah,01h
int 21h
sub al,30h
add dl,al
mov bx, offset num2
mov [bx+si],dl
inc si
loop input2 ;循环读入num2
mov cx, 4
mov si, 3
loadsum:
mov ax,0
mov bx, offset num1
mov al, [bx+si]
mov bx, offset num2
adc al, [bx+si]
daa
mov sum[si], al
dec si
loop loadsum ;循环计算值并且存入sum
ret
addnum endp
print proc
mov dl,10 ;输出回车换行,回车键ACSII值为10
mov ah,02h
int 21h
jnc next ;若最高位有进位,则向下执行,否则跳转至next
mov dl,'1' ;输出字符'1'
mov ah,02h
int 21h
next:
mov bx, offset sum
mov cx, 4
mov si, 0
output:
mov dl,[bx+si]
and dl,11110000b
shr dl,1
shr dl,1
shr dl,1
shr dl,1
add dl,'0'
mov ah,02h
int 21h
mov dl,[bx+si]
and dl,00001111b
add dl,'0'
mov ah,02h
int 21h
inc si
loop output ;循环输出sum值
ret
print endp
code ends
end start
x86汇编实现长整数加法
本文分享了使用x86汇编语言进行8位十进制整数加法的方法,包括直接相加和键盘输入求和两种情况,涉及mov、int、add等关键指令。
3024

被折叠的 条评论
为什么被折叠?



