汇编语言,输入任意两个整数然后求和并输出怎么做
答案:1 悬赏:60 手机版
解决时间 2021-11-23 06:00
- 提问者网友:轻浮
- 2021-11-22 09:32
汇编语言,输入任意两个整数然后求和并输出怎么做
最佳答案
- 五星知识达人网友:过活
- 2021-11-22 10:08
; multi-segment executable file template.
data segment
s1 dw 0
s2 dw 0
msg1 db "Input integer one:$"
msg2 db 0dh, 0ah, "Input integer two:$"
msg3 db 0dh, 0ah, "Result is:$"
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
; add your code here
lea dx, msg1
mov ah, 9
int 21h ; output string at ds:dx
mov cx, 0
call inInt
mov s1, cx
lea dx, msg2
mov ah, 9
int 21h ; output string at ds:dx
mov cx, 0
call inInt
mov s2, cx
add cx, s1
mov s1, cx
lea dx, msg3
mov ah, 9
int 21h ; output string at ds:dx
mov ax, s1
call show
; wait for any key....
mov ah, 1
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
inInt proc near
next:
mov ah,1
int 21h
cmp al, 0dh
jz r1
cmp al, 0ah
jz r1
cmp al, '0'
jb err
cmp al, '9'
ja err
sub al, '0'
mov dl, al
mov al, 0ah ;//* 10
mul cl
add al, dl ;// cl * 10 + al
mov cx, ax
jmp next
err:
mov cx, -1
r1:
ret
endp
show proc near ;将双字Hex化为 10 进制并显示
mov bx,10
xor cx,cx
Q0:
xor dx,dx
div bx
or dx,0e30h
push dx
inc cx
cmp ax,0
jnz Q0
Q1:pop ax
int 10h
loop Q1
ret
end start ; set entry point and stop the assembler.追问能给解释一下吗?追答前面我用的是emu8086调试的,语法和masm/tasm等稍有差异,修改了一下,改为masm语法。
学习的话,可以试用一下emu8086,非常不错的,写代码,编译调试等非常方便,还有许多不错的例子。
回复字数太多,改用附件。
data segment
s1 dw 0
s2 dw 0
msg1 db "Input integer one:$"
msg2 db 0dh, 0ah, "Input integer two:$"
msg3 db 0dh, 0ah, "Result is:$"
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
; add your code here
lea dx, msg1
mov ah, 9
int 21h ; output string at ds:dx
mov cx, 0
call inInt
mov s1, cx
lea dx, msg2
mov ah, 9
int 21h ; output string at ds:dx
mov cx, 0
call inInt
mov s2, cx
add cx, s1
mov s1, cx
lea dx, msg3
mov ah, 9
int 21h ; output string at ds:dx
mov ax, s1
call show
; wait for any key....
mov ah, 1
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
inInt proc near
next:
mov ah,1
int 21h
cmp al, 0dh
jz r1
cmp al, 0ah
jz r1
cmp al, '0'
jb err
cmp al, '9'
ja err
sub al, '0'
mov dl, al
mov al, 0ah ;//* 10
mul cl
add al, dl ;// cl * 10 + al
mov cx, ax
jmp next
err:
mov cx, -1
r1:
ret
endp
show proc near ;将双字Hex化为 10 进制并显示
mov bx,10
xor cx,cx
Q0:
xor dx,dx
div bx
or dx,0e30h
push dx
inc cx
cmp ax,0
jnz Q0
Q1:pop ax
int 10h
loop Q1
ret
end start ; set entry point and stop the assembler.追问能给解释一下吗?追答前面我用的是emu8086调试的,语法和masm/tasm等稍有差异,修改了一下,改为masm语法。
学习的话,可以试用一下emu8086,非常不错的,写代码,编译调试等非常方便,还有许多不错的例子。
回复字数太多,改用附件。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯