主题:求教分支结构的汇编程序
supergood
[专家分:0] 发布于 2005-12-09 20:07:00
各位高手 帮小弟做一个题目啊 现在小弟十分急;
题目:
4 个数 a,b,c,m
(为了简化 输入时a,b,c 取值为0或1)
当a=1时 进入判断 a=0时 直接输出failure
1.当0<m<=5000时 1).b=1 则判断c 若c=1 则 输出 agreed
若c=0 则 输出 disgreed
2).b=0 则 输出 disgreed
2.当m>5000 1).c=1 输出 agreed
2).c=0 输出 disgreed
3.m<0 直接输出failure
下面是 我用c++编的 各位高手帮小弟用汇编写一个啊
#include <iostream.h>
void main()
{
int a,b,c;
float m;
cin>>m>>a>>b>>c;
if(a==1)
{
if(m>0 && m<=5000)
{
if(b==1)
{
if(c==1)
cout<<"Agreed!+"<<endl;
else cout<<"Disgreed!+"<<endl;
}
else cout<<"Disgreed!+"<<endl;
}
else if(m>5000)
{
if(c==1)
cout<<"Agreed!"<<endl;
else
if(c==0) cout<<"Disgreed!"<<endl;
}
else cout<<"Failture!"<<endl;
}
else cout<<"Failture!"<<endl;
}
回复列表 (共5个回复)
沙发
erping [专家分:3660] 发布于 2005-12-09 21:33:00
.model small
.stack
.data
a db ?
b db ?
c1 db ? ;取 c 不知为什么,编译通不过,我猜可能和哪个关键字重名了
m dw ?
strMsg1 db 'please input a, b, c, m: ', '$'
strMsg2 db 'failure', '$'
strMsg3 db 'Agreed!+', 0DH, 0AH, '$'
strMsg4 db 'Disgreed!+', 0DH, 0AH, '$'
.code
_main:
mov ax, @data
mov ds, ax
lea dx, strMsg1
mov ah, 9
int 21H
mov ah, 1
int 21H
xor al, 30H
mov a, al
mov ah, 2
mov dl, ' '
int 21H
mov ah, 1
int 21H
xor al, 30H
mov b, al
mov ah, 2
mov dl, ' '
int 21H
mov ah, 1
int 21H
xor al, 30H
mov c1, al
mov ah, 2
mov dl, ' '
int 21H
xor bx, bx
xor dl, dl
mov cl, 10
_@0: ;读取转换 m
mov ah, 1
int 21H
sub al, 30H
jl _@1
cmp al, 9
jg _@1
mov dl, al
mov ax, bx
mul cl
add ax, dx
mov bx, ax
jmp _@0
_@1:
mov m, ax
mov dx, 0DH
mov ah, 2
int 21H
mov dx, 0AH
mov ah, 2
int 21H
;开始比较
cmp a, 1 ;a == 1?
jne _output_string1
cmp m, 0 ;m < 0 ?
jl _output_string1
cmp m, 5000 ;m > 0 ?
jg _@2
cmp b, 1 ;b == 1?
jne _output_string3
_@2:
cmp c1, 1 ;c1 == 1?
jne _output_string3
jmp _output_string2
_output_string1: ;failure
lea dx, strMsg2
jmp _@
_output_string2:
lea dx, strMsg3
jmp _@
_output_string3:
lea dx, strMsg4 ;输出 Disgreed!+
jmp _@
_@:
mov ah, 9
int 21H
mov ax, 4C00H
int 21H
end _main
板凳
erping [专家分:3660] 发布于 2005-12-09 21:34:00
没有时间一一测试,如果不对一定要告诉我
3 楼
supergood [专家分:0] 发布于 2005-12-09 21:57:00
首先非常感谢对我的帮助
在运行中 要求输入a,b,c,m
当输入1 0 1 9000时
因为9000>5000 所以直接有c来判断
又c=1 所以结果应该是agreed
但是输出的是 disgreed
请高手再帮忙帮我改一下啊 小弟感激不尽
4 楼
erping [专家分:3660] 发布于 2005-12-10 12:29:00
;抱歉,没有仔细检查,希望没有给你带来麻烦
;下面我已经简单的测试过了,应该没有问题了 ^_^
.model small
.stack
.data
a db ?
b db ?
c1 db ? ;取 c 不知为什么,编译通不过,我猜可能和哪个关键字重名了
m dw ?
strMsg1 db 'please input a, b, c, m: ', '$'
strMsg2 db 'failure', 0DH, 0AH, '$'
strMsg3 db 'Agreed!+', 0DH, 0AH, '$'
strMsg4 db 'Disgreed!+', 0DH, 0AH, '$'
.code
_main:
mov ax, @data
mov ds, ax
lea dx, strMsg1
mov ah, 9
int 21H
mov ah, 1
int 21H
xor al, 30H
mov a, al
mov ah, 2
mov dl, ' '
int 21H
mov ah, 1
int 21H
xor al, 30H
mov b, al
mov ah, 2
mov dl, ' '
int 21H
mov ah, 1
int 21H
xor al, 30H
mov c1, al
mov ah, 2
mov dl, ' '
int 21H
xor si, si ;存放转换为机器数的 m
xor bx, bx ;存放用户输入的数字
mov cx, 10
_@0: ;读取转换 m
mov ah, 1
int 21H
sub al, 30H
jb _@1
cmp al, 9
ja _@1
mov bl, al
mov ax, si
mul cx ;这里写也错了
add ax, bx
mov si, ax
jmp _@0
_@1:
mov m, si ;这里写错了,抱歉其他地方也修正了一下
mov dx, 0DH
mov ah, 2
int 21H
mov dx, 0AH
mov ah, 2
int 21H
;开始比较
cmp a, 1 ;a == 1?
jne _output_string1
cmp m, 0 ;m < 0 ?
jb _output_string1
cmp m, 5000 ;m > 0 ?
ja _@2
cmp b, 1 ;b == 1?
jne _output_string3
_@2:
cmp c1, 1 ;c1 == 1?
je _output_string2
jmp _output_string3
_output_string1: ;failure
lea dx, strMsg2
jmp _@
_output_string2: ;Agreed!+
lea dx, strMsg3
jmp _@
_output_string3: ;Disgreed!+
lea dx, strMsg4
jmp _@
_@:
mov ah, 9
int 21H
mov ax, 4C00H
int 21H
end _main
5 楼
supergood [专家分:0] 发布于 2005-12-10 13:45:00
非常感谢,已经通过了
我来回复