主题:我向各位高手请教个问题,编写一个X加减Y等于?的计算器,XY是16位带符号数子程序设计方法编写
影风
[专家分:0] 发布于 2005-12-05 17:17:00
先谢谢大家了!大家可以发到我的邮箱:jiangjian11101@163.com
回复列表 (共2个回复)
沙发
erping [专家分:3660] 发布于 2005-12-05 17:58:00
.model small
.data
X dw ?
Y dw ?
_Enter macro ;回车
mov dl, 0AH
mov ah, 2
int 21H
mov dl, 0DH
mov ah, 2
int 21H
endm
.code
_main:
mov AX, @data
mov DS, AX
call input
mov X, AX
call input
mov Y, AX
add AX, X
mov CX, 10
call print
_Enter
mov AX, 4C00H
int 21H
print proc ;提供多种进制的输出
;ax 存放要转换的数
;cx 存放进制形式 (2 <= 进制 <= 35)
cmp cx, 2
jl _error_
cmp cx, 35
ja _error_
push bx ;保存 bx
push dx ;...
sub sp, 16 ;16 (2 * 8)个字节的临时变量
mov bx, sp ;bx 指向变量地址
xor dx, dx
_loop:
cmp ax, 0
jne _next
cmp dx, 0
je _print
_next:
div cx
cmp dx, 9 ;比较余数是否大于 9
ja _than_nine
add dl, '0'
jmp _save_dl
_than_nine:
add dl, 'A' - 0AH ;大于 9 的数转换处理
_save_dl:
mov ss:[bx], dl
inc bx
cwd
jmp _loop
_print:
dec bx
_print_next:
cmp bx, sp
jl _end
mov dl, ss:[bx]
mov ah, 2
int 21H
dec bx
jmp _print_next
_error_:
xor ax, ax ;return false
ret
_end:
add sp, 16 ;恢复堆栈
pop dx
pop bx
mov ax, 1 ;return true
ret
print endp
input proc
push SI
xor SI, SI
mov CL, 10
_input_1:
mov AH, 7
int 21H
mov DL, AL ;为输出字符做好准备
sub AL, '0'
jl _ret_input
cmp AL, 9
jg _ret_input
push AX
mov AX, SI
mul CL
mov SI, AX
pop AX
xor AH, AH
add SI, AX
mov AH, 2
int 21H
jmp _input_1
_ret_input:
_Enter
mov AX, SI
pop SI
ret
input endp
end _main
板凳
erping [专家分:3660] 发布于 2005-12-05 18:01:00
这个程序没有检查溢出,只处理了加法。
减法部分,只要改一个指令即可
我来回复