回 帖 发 新 帖 刷新版面

主题:求教分支结构的汇编程序

各位高手 帮小弟做一个题目啊 现在小弟十分急;
题目:
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个回复)

沙发



.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

板凳

没有时间一一测试,如果不对一定要告诉我

3 楼

首先非常感谢对我的帮助

在运行中 要求输入a,b,c,m
当输入1 0 1 9000时

因为9000>5000    所以直接有c来判断
又c=1  所以结果应该是agreed

但是输出的是 disgreed

请高手再帮忙帮我改一下啊  小弟感激不尽

4 楼

;抱歉,没有仔细检查,希望没有给你带来麻烦
;下面我已经简单的测试过了,应该没有问题了 ^_^
.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 楼

非常感谢,已经通过了

我来回复

您尚未登录,请登录后再回复。点此登录或注册