求一个MASM的加减法程序

求一个MASM的加减法程序,第1张

本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。

Code Segment

Assume CS:Code,DS:Code

---------------------------------------

功能:显示指定地址(Str_Addr)的字符串

入口:

Str_Addr=字符串地址(要求在数据段)

用法: Output Str_Addr

用法举例:Output PromptStr

Output MACRO Str_Addr

lea dx,Str_Addr

mov ah,9

int 21h

EndM

---------------------------------------

功能:输出回车换行

Output_CTLF proc Near

push ax

push dx

mov ah,02h

mov dl,0dh

int 21h

mov dl,0ah

int 21h

pop dx

pop ax

ret

Output_CTLF endp

---------------------------------------

Clear_Screen proc Near 清屏

push es

mov ax,0b800h

mov es,ax

xor di,di

mov al,20h

mov ah,es:[di][1] 取字符显示属性

mov cx,2000

cld

rep stosw 清屏

pop es

xor dx,dx

xor bh,bh

mov ah,2

int 10h

ret

Clear_Screen endp

---------------------------------------

Addition Proc Near 加法运算

lea ax,Addition

push ax

mov cl,'+'

mov ch,'1'

call Input_Digit

add al,ah 加法

aaa ASCII码加调整

@@Disp_Resault:mov ah,2

push ax

jnc $+6

mov dl,ch

int 21h

pop ax

or al,30h

mov dl,al

int 21h

call Continue_Back

ret

Addition EndP

---------------------------------------

Subtration Proc Near 减法运算

lea ax,Subtration

push ax

mov cl,'-'

mov ch,'-'

call Input_Digit

sub al,ah 减法

jnc $+6

neg al

jmp @@Disp_Resault

aas ASCII码减调整

jmp @@Disp_Resault

Subtration EndP

---------------------------------------

输入两个十进制数

Input_Digit Proc Near

Output prompt_1 提示输入第一个数

call @@Input

mov bl,al

Output prompt_2 提示输入第二个数

call @@Input

mov bh,al

mov dx,bx

call Output_CTLF

mov ah,2

mov dl,bl

int 21h

mov dl,cl

int 21h

mov dl,bh

int 21h

mov dl,'='

int 21h

mov ax,bx

ret

prompt_1 db 13,10,'Please input the first digit:$'

prompt_2 db 13,10,'Please input the second digit:$'

@@Input: mov ah,1

int 21h

cmp al,'0'

jb @@Input

cmp al,'9'

ja @@Input

ret

prompt_3 db 13,10,'Continue/Back(C/B)?$'

Continue_Back: pop ax

Output prompt_3

@@Press_0: mov ah,1

int 21h

or al,20h 转换成小写

cmp al,'c'

jnz $+3

ret

cmp al,'b'

jnz @@Press_0

pop ax

ret

Input_Digit EndP

---------------------------------------

Main_Menu db 'add',13,10,'subtract',13,10,'quit',13,10,'$'

Press_Key db 7,13,10,13,10,'The complated. Press any key to exit...$'

Start:push cs

pop ds

push cs

pop es 使数据段、附加段与代码段同段

@@Menu: call Clear_Screen 清屏

Output Main_Menu 显示菜单

@@Press_1: mov ah,1

int 21h

or al,20h 转换成小写

cmp al,'q'

jz Exit_Proc 结束程序

cmp al,'a'

jnz $+10

call Clear_Screen

call Addition 加法

jmp @@Menu

cmp al,'s'

jnz @@Press_1

call Clear_Screen

call Subtration 减法

jmp @@Menu

-----------------------------------

Exit_Proc: Output Press_Key 提示 *** 作完成,按任意键结束程序

mov ah,1

int 21h

mov ah,4ch 结束程序

int 21h

Buffer dw ?,? 数据缓冲区

Code ENDS

END Start 编译到此结束

Masm for Windows 集成实验环境软件介绍Masm for Windows 集成实验环境是针对汇编语言初学者的特点开发的一个简单易用的汇编语言学习与实验软件,支持32位与64位的WINDOWS 7,支持DOS的16/32位汇编程序和Windows下的32汇编程序(并提供调试通过的35个WINDOWS汇编程序实例源代码),它具有错误信息自动定位、关键字实时帮助并且在帮助中动画演示汇编指令的执行过程、语法着色、无限次撤消与恢复、WORD式的查找、替换、定位、支持中文、长文件名等功能。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11230641.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存