主题:新手求救~!用汇编编写的一个简单程序~
tinna
[专家分:0] 发布于 2006-05-11 02:19:00
题目很简单,但是怎么都不会~[em10]
高手们帮下忙吧,谢谢啦[em2]
题目:从键盘输入两个正整数,求两数和并输出。
回复列表 (共3个回复)
沙发
fxzhg03107 [专家分:10] 发布于 2006-05-11 20:32:00
兄弟,这么简单的问题随便那个教材的习题上都有的。
程序就不写了 说一下思路吧
首先定义 三个变量 mesg1,mesg2和sum
21h 的1号功能调用两次从键盘接受两个正数
分别送给 mesg1,mesg2
然后在让他们相加就是了
结果送给sum
用21h的2号或者9号功能调用显示就是了
板凳
msgrev [专家分:190] 发布于 2006-05-11 22:04:00
.386p
Seg_Data SEGMENT use16
a DW ?
b DW ?
sum DW ?
message0 DB "please enter first number!",0dh,0ah,'$'
message1 DB "please enter other number!",0dh,0ah,'$'
Seg_Data ENDS
Seg_Stack SEGMENT use16
DW 512 dup (?)
Top label WORD
Seg_Stack ENDS
Seg_Code SEGMENT use16
main proc far
Assume cs:Seg_Code , ds:Seg_Data , ss:Seg_Stack
Start:
mov ax , Seg_Stack
mov ss , ax
mov sp , offset Top
mov ax , Seg_Data
mov ds , ax
mov es , ax
mov ah , 9
lea dx , message0
int 21h
call EnterDec
mov a,bx
call ShowDec
call crlf
mov ah , 9
lea dx , message1
int 21h
call EnterDec
mov b,bx
call ShowDec
call crlf
mov bx,a
add bx,b
call ShowDec
mov ah,4ch
int 21h
main Endp
ShowDec proc near
mov cx, 10000d
call Data_Div
mov cx, 1000d
call Data_Div
mov cx, 100d
call Data_Div
mov cx, 10d
call Data_Div
mov cx, 1d
call Data_Div
ret
ShowDec Endp
Data_Div proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,2h
int 21h
ret
Data_Div Endp
EnterDec proc near
mov bx , 0
newchar:
mov ah , 1
int 21h
sub al ,30h
jl exit
cmp al , 9d
jg exit
cbw
xchg ax ,bx
mov cx ,10d
mul cx
xchg ax,bx
add bx,ax;
jmp newchar
exit:
ret
EnterDec Endp
crlf proc near
mov dl ,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h,
ret
crlf endp
Seg_Code ENDS
END start
我是这样做的,请高手指点指点 。
3 楼
msgrev [专家分:190] 发布于 2006-05-11 22:13:00
我重新修改了一下.如下:
.386p
Seg_Data SEGMENT use16
a DW ?
b DW ?
sum DW ?
message0 DB "please enter first number!",0dh,0ah,'$'
message1 DB "please enter other number!",0dh,0ah,'$'
message2 DB "the sum of two data!",0dh,0ah,'$'
Seg_Data ENDS
Seg_Stack SEGMENT use16
DW 512 dup (?)
Top label WORD
Seg_Stack ENDS
Seg_Code SEGMENT use16
main proc far
Assume cs:Seg_Code , ds:Seg_Data , ss:Seg_Stack
Start:
mov ax , Seg_Stack
mov ss , ax
mov sp , offset Top
mov ax , Seg_Data
mov ds , ax
mov es , ax
mov ah , 9
lea dx , message0
int 21h
call EnterDec
mov a,bx
call ShowDec
call crlf
mov ah , 9
lea dx , message1
int 21h
call EnterDec
mov b,bx
call ShowDec
call crlf
mov ah , 9
lea dx , message2
int 21h
mov bx,a
add bx,b
call ShowDec
mov ah,4ch
int 21h
main Endp
ShowDec proc near
mov cx, 10000d
call Data_Div
mov cx, 1000d
call Data_Div
mov cx, 100d
call Data_Div
mov cx, 10d
call Data_Div
mov cx, 1d
call Data_Div
ret
ShowDec Endp
Data_Div proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
cmp dl,'0'
je exit0
mov ah,2h
int 21h
exit0:
ret
Data_Div Endp
EnterDec proc near
mov bx , 0
newchar:
mov ah , 1
int 21h
sub al ,30h
jl exit
cmp al , 9d
jg exit
cbw
xchg ax ,bx
mov cx ,10d
mul cx
xchg ax,bx
add bx,ax;
jmp newchar
exit:
ret
EnterDec Endp
crlf proc near
mov dl ,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h,
ret
crlf endp
Seg_Code ENDS
END start
我来回复