汇编实现的加减乘除四则运算
2008-12-31 22:27
861 查看
;本程序综合多种子程序传参法,包括寄存器传参,地址表传参,堆栈传参
data segment
num1Message db 'please input num1:','$'
num2Message db 'please input the num2:','$'
resultMessage db 'result:','$'
yushuMessage db 'yushu:','$'
choiceMessage db '1.add 2.sub 3.mul 4.div','$'
pleaseChoice db 'please choice the number what you want:','$'
continue db '---------------------------------------------','$'
exit db 'if you want to exit,input 0','$'
exit_input db ?
choiced db ?
num1 db 50,0,50 dup(?)
num2 db 50,0,50 dup(?)
result dw ?
yushu dw ?
factor db 10
data ends
stack segment
dw 100 dup(?)
tos label word
stack ends
code segment
main proc far
assume cs:code,ds:data
start:
;----------------------------------------------------程序初始化-----
mov ax,stack
mov ss,ax
lea sp,tos
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
loop_main:
;---------------------------界面和选择-------------------------------
call init
call choice
;----------------------------操作数----------------------------------
lea dx,num1Message ;寄存器传参
call message
lea dx,num1 ;寄存器传参
call input ;输入num1
push bx ;保存BX,即NUM1,堆栈传参
;空格
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
lea dx,num2Message
call message
lea dx,num2
call input ;输入num2
push bx ;保存BX,即NUM2
;------------------------------跳转到相应的操作---------------------
cmp al,'1'
jz result_sum
cmp choiced,'2'
jz result_sub
cmp choiced,'3'
jz result_mul
cmp choiced,'4'
jz result_div
result_sum:
call sum
jmp print_result
result_sub:
call substract
jmp print_result
result_mul:
call mult
jmp print_result
result_div:
call divs
print_result:
call ctrl
lea dx,resultMessage
call message
call output
;-------除法,余数另外输出--------
call ctrl
cmp choiced,'4'
jnz end_print
lea dx,yushuMessage
call message
mov ax,yushu
mov result,ax
call output
call ctrl
;------------------
end_print:
lea dx,exit
call message
call ctrl
lea dx,continue
call message
call ctrl
mov ah,01h
int 21h
cmp al,'0'
jnz loop_main
pop ax
pop ds
mov ax,4c00h
int 21h
main endp
;----------------------------子程序部分-----------------------------
sum proc near
push bp
mov bp,sp
push si
push di
mov si,[bp+6] ;num1
mov di,[bp+4];num2
add di,si
mov result,di
pop di
pop si
pop bp
ret 4
sum endp
substract proc near
push bp
mov bp,sp
push si
push di
mov di,[bp+6] ;num1
mov si,[bp+4];num2
sub di,si
mov result,di
pop di
pop si
pop bp
ret 4
substract endp
mult proc near
push bp
mov bp,sp
push ax
push bx
mov ah,0
mov al,byte ptr [bp+6] ;num1
mov bh,0
mov bl,byte ptr [bp+4];num2
mul bl
mov result,ax
pop bx
pop ax
pop bp
ret 4
mult endp
divs proc near
push bp
mov bp,sp
push ax
push bx
mov ax,[bp+6] ;num1
mov dx,0
mov bx,[bp+4];num2
div bx
mov result,ax
mov yushu,dx
pop bx
pop ax
pop bp
ret 4
divs endp
init proc near
lea dx,choiceMessage
call message
call ctrl
lea dx,pleaseChoice
call message
call ctrl
ret
init endp
choice proc near
;lea dx,choiceMessage
;mov ah,09h
;int 21h
;call ctrl
mov ah,01h
int 21h
mov choiced ,al
call ctrl
ret
choice endp
ctrl proc near
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
int 21h
ret
ctrl endp
input proc near
mov al,0
mov ah,0ah
int 21h
add dx,1
mov si,dx
mov cl,[si]
mov ch,0
mov bx,0
next:
mov ax,bx
mul factor
mov bx,ax
inc si
mov al,[si]
mov ah,0
sub al,30h
add bx,ax ;bx存十进制
loop next
ret
input endp
output proc near
mov ax,result
mov dx,0
mov cx,0
loop1:
div word ptr factor
push dx
inc cx
mov dx,0
cmp ax,0
jz show
jmp loop1
show:
pop dx
add dx,30h
mov ah,02h
int 21h
loop show
ret
output endp
message proc near
mov ah,09h
int 21h
ret
message endp
code ends
end start
data segment
num1Message db 'please input num1:','$'
num2Message db 'please input the num2:','$'
resultMessage db 'result:','$'
yushuMessage db 'yushu:','$'
choiceMessage db '1.add 2.sub 3.mul 4.div','$'
pleaseChoice db 'please choice the number what you want:','$'
continue db '---------------------------------------------','$'
exit db 'if you want to exit,input 0','$'
exit_input db ?
choiced db ?
num1 db 50,0,50 dup(?)
num2 db 50,0,50 dup(?)
result dw ?
yushu dw ?
factor db 10
data ends
stack segment
dw 100 dup(?)
tos label word
stack ends
code segment
main proc far
assume cs:code,ds:data
start:
;----------------------------------------------------程序初始化-----
mov ax,stack
mov ss,ax
lea sp,tos
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
loop_main:
;---------------------------界面和选择-------------------------------
call init
call choice
;----------------------------操作数----------------------------------
lea dx,num1Message ;寄存器传参
call message
lea dx,num1 ;寄存器传参
call input ;输入num1
push bx ;保存BX,即NUM1,堆栈传参
;空格
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
lea dx,num2Message
call message
lea dx,num2
call input ;输入num2
push bx ;保存BX,即NUM2
;------------------------------跳转到相应的操作---------------------
cmp al,'1'
jz result_sum
cmp choiced,'2'
jz result_sub
cmp choiced,'3'
jz result_mul
cmp choiced,'4'
jz result_div
result_sum:
call sum
jmp print_result
result_sub:
call substract
jmp print_result
result_mul:
call mult
jmp print_result
result_div:
call divs
print_result:
call ctrl
lea dx,resultMessage
call message
call output
;-------除法,余数另外输出--------
call ctrl
cmp choiced,'4'
jnz end_print
lea dx,yushuMessage
call message
mov ax,yushu
mov result,ax
call output
call ctrl
;------------------
end_print:
lea dx,exit
call message
call ctrl
lea dx,continue
call message
call ctrl
mov ah,01h
int 21h
cmp al,'0'
jnz loop_main
pop ax
pop ds
mov ax,4c00h
int 21h
main endp
;----------------------------子程序部分-----------------------------
sum proc near
push bp
mov bp,sp
push si
push di
mov si,[bp+6] ;num1
mov di,[bp+4];num2
add di,si
mov result,di
pop di
pop si
pop bp
ret 4
sum endp
substract proc near
push bp
mov bp,sp
push si
push di
mov di,[bp+6] ;num1
mov si,[bp+4];num2
sub di,si
mov result,di
pop di
pop si
pop bp
ret 4
substract endp
mult proc near
push bp
mov bp,sp
push ax
push bx
mov ah,0
mov al,byte ptr [bp+6] ;num1
mov bh,0
mov bl,byte ptr [bp+4];num2
mul bl
mov result,ax
pop bx
pop ax
pop bp
ret 4
mult endp
divs proc near
push bp
mov bp,sp
push ax
push bx
mov ax,[bp+6] ;num1
mov dx,0
mov bx,[bp+4];num2
div bx
mov result,ax
mov yushu,dx
pop bx
pop ax
pop bp
ret 4
divs endp
init proc near
lea dx,choiceMessage
call message
call ctrl
lea dx,pleaseChoice
call message
call ctrl
ret
init endp
choice proc near
;lea dx,choiceMessage
;mov ah,09h
;int 21h
;call ctrl
mov ah,01h
int 21h
mov choiced ,al
call ctrl
ret
choice endp
ctrl proc near
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
int 21h
ret
ctrl endp
input proc near
mov al,0
mov ah,0ah
int 21h
add dx,1
mov si,dx
mov cl,[si]
mov ch,0
mov bx,0
next:
mov ax,bx
mul factor
mov bx,ax
inc si
mov al,[si]
mov ah,0
sub al,30h
add bx,ax ;bx存十进制
loop next
ret
input endp
output proc near
mov ax,result
mov dx,0
mov cx,0
loop1:
div word ptr factor
push dx
inc cx
mov dx,0
cmp ax,0
jz show
jmp loop1
show:
pop dx
add dx,30h
mov ah,02h
int 21h
loop show
ret
output endp
message proc near
mov ah,09h
int 21h
ret
message endp
code ends
end start
相关文章推荐
- 位操作实现加减乘除四则运算
- JS实现的加减乘除四则运算计算器示例
- 位运算实现加减乘除四则运算
- c++实现大数加减乘除四则运算
- 位操作实现加减乘除四则运算
- 每天一道LeetCode----位运算实现加减乘除四则运算
- 位操作实现加减乘除四则运算
- 用Java位运算实现加减乘除四则运算
- 用栈的知识实现四则运算(带括号的加减乘除)
- java 实现带括号的加减乘除四则运算
- C语言实现 加减乘除四则运算(小数)
- 大数运算实现加减乘除四则运算
- 7. 使用栈实现加减乘除四则运算
- 位操作实现加减乘除四则运算
- 使用位运算实现加减乘除四则运算
- 47 - 按位实现加减乘除 四则运算
- 用Java位运算实现加减乘除四则运算
- 只用位运算来实现整数的加减乘除四则运算
- java实现超大整数加减乘除四则运算
- 汇编实现一位数加减乘除