您的位置:首页 > 其它

汇编实现的加减乘除四则运算

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: