(汇编)输入两个四位十进制数字并求和后以十进制输出

用java数十行搞定的程序,用汇编要100多行。。。

而且还不支持异常处理,崩溃啊。。。

不过对于汇编基本的数据处理啥的还是有帮助的,

上程序,win32汇编

.model small .586p .data remind_msg_1 db "please input the first number",0ah,0dh,"$" number_1 db 5 ;数字字符串缓冲区1 db ? db 5 dup(?) db "$" number_value_1 dw ?,"$" remind_msg_2 db "please input the second number",0ah,0dh,"$" number_2 db 5 ;数字字符串缓冲区2 db ? db 5 dup(?) db "$" number_value_2 dw ?,"$" change_line_msg db 0ah,0dh,"$" count db ?,"$";循环数目 factor dw ?,"$";乘数因子 temp_result dw ?,"$" result dw ?,"$" .code change_line proc near push dx push ax lea dx,change_line_msg mov ah,09h int 21h pop ax pop dx ret change_line endp;换行 calc_factor proc near push cx push ax push dx push bx dec cx xor ax,ax mov ax,1 xor bx,bx mov bx,10 sub_c: cmp cx,0 jz sub1 mul bx dec cx jmp sub_c sub1: push si lea si,factor mov word ptr[si],ax pop si pop bx pop dx pop ax pop cx ret calc_factor endp;计算乘数,最后结果放在factor中,参数需要cx sub_mul proc near pusha xor bx,bx mov bl,al lea si,factor mov ax,word ptr[si] mul bx lea si,temp_result mov word ptr[si],ax popa ret sub_mul endp;两个数分别放在al,factor中,求最后结果放在temp_result中 add_ proc near pusha lea si,temp_result mov ax,word ptr[si] lea si,result mov bx,word ptr[si] add bx,ax mov word ptr[si],bx popa ret add_ endp;把result+temp_result放到result中 .startup lea dx,remind_msg_1 mov ah,09h int 21h;print info lea dx,number_1 mov ah,0ah int 21h;input first number call change_line lea dx,remind_msg_2 mov ah,09h int 21h;print info lea dx,number_2 mov ah,0ah int 21h;input second number call change_line ;调用multi的准备工作 xor cx,cx lea si,result mov word ptr[si],cx lea si,number_1+1 xor cx,cx xor bx,bx mov cl,byte ptr [si];cl中放了这个长度 calc_1: lea si,number_1+2 mov al,byte ptr[si][bx] sub al,30h call calc_factor call sub_mul;结果在temp_result中 call add_ inc bx loop calc_1;完成以后结果在result中 lea si,result mov ax,word ptr[si] lea si,number_value_1 mov word ptr[si],ax;存储了第一个数字的结果 ;调用multi的准备工作 xor cx,cx lea si,result mov word ptr[si],cx lea si,number_2+1 xor cx,cx xor bx,bx mov cl,byte ptr [si];cl中放了这个长度 calc_2: lea si,number_2+2 mov al,byte ptr[si][bx] sub al,30h call calc_factor call sub_mul;结果在temp_result中 call add_ inc bx loop calc_2;完成以后结果在result中 lea si,result mov ax,word ptr[si] lea si,number_value_2 mov word ptr[si],ax;存储了第一个数字的结果 lea si,number_value_1 mov ax,word ptr[si] lea si,number_value_2 mov bx,word ptr[si] xor dx,dx add ax,bx mov bx,10000 div bx mov bx,dx mov dl,al add dl,30h mov ah,02h int 21h; xor dx,dx mov ax,bx mov bx,1000 div bx mov bx,dx mov dl,al add dl,30h mov ah,02h int 21h; xor dx,dx mov ax,bx mov bx,100 div bx mov bx,dx mov dl,al add dl,30h mov ah,02h int 21h; xor dx,dx mov ax,bx mov bx,10 div bx mov bx,dx mov dl,al add dl,30h mov ah,02h int 21h mov dl,bl add dl,30h mov ah,02h int 21h mov ax,4c00h int 21h end

你可能感兴趣的:(汇编)