回 帖 发 新 帖 刷新版面

主题:求一道简单程序题

我自学汇编语言只有一断时间,发现有很多都不会,今天自已做了一道程序,发现错误很,但不知错在哪,请各位高手帮忙,谢谢各位
程序题目是:给任意三个数,找出最大数 程序如下:
DATA1 SEGMENT
    X DW ?
    Y DW ?
    Z DW ?
RESULT DW ?
DATA1 ENDS
STACK1 SEGMENT PARA STACK
       DW 20 DUP(0)
STACK1 ENDS
CODE1 SEGMENT
      ASSUME CS:CODE1,DS:DATA1,SS:STACK1
START: MOV AX,DATA1
       MOV DS,AX
       MOV AX,X
       MOV BX,Y
       CMP AX,BX
       JGE L1
       MOV CX,Z
       CMP BX,CX
       JGE L2
       MOV CX,Z
       MOV RESULT,CX
       JMP L4
       L2: MOV BX,X
           MOV RESULT,BX
       JMP L4
       L1: MOV CX,Z
           CMP AX,CX
       JGE L3
       MOV CX,Z
       MOV RESULT,CX
       L3: MOV AX,X
       MOV RESULT,AX
       L4: MOV AH,4CH
           INT 21H
CODE1 ENDS
      END START
我分别用1,2,3代入检查
保存后我用DEBUG程序观察结果
当X=1,Y=2,Z=3时,最大值是3
当Z=3,X=1,Y=2时,最大值是3
当Z=3,Y=2,X=1时,最大值是3
但是之后的却是错的
当X=1,Z=3,Y=2时,最大值是1
当Y=2,X=1,Z=3时,最大值是2
当Y=2,Z=3,X=1时,最大值是2 
我检查了好几编,都不知错在哪,请各位高手帮忙,在下感激不尽!!!!!!!!!!

回复列表 (共4个回复)

沙发

你没有比较大小的指令!
只有比较是否相等的指令,当然
是一直去第一个了!1

板凳

lz的思路不太清晰,看看这个吧

    mov ax,x
    mov bx,y

    cmp ax,bx
    jge L1
    mov ax,bx

L1:    mov bx,z
    cmp ax,bx
    jge LED
    mov ax,bx

LED:      mov result,ax

3 楼

我的程序是这样的,请指点:

data segment
     result db 0ah,0dh,'the result is:$'
     max db ?
     
data ends
code segment
     assume cs:code,ds:data
start:
     mov ax,data
     mov ds,ax
     mov ah,01
     int 21h
     mov max,al
     mov cx,2;
lop:     
     mov ah,01
     int 21h
     cmp max,al
     jle greater
     loop lop
     jmp exit
greater:
     mov max,al
     loop lop  
exit:
          
     lea dx,result
     mov ah,09h
     int 21h
          
     mov dl,max
     mov ah,02h
     int 21h
     
     mov ah,4ch
     int 21h        
code ends
end start

4 楼

只需要一个空间来存放Max的值就行了
   其他的用寄存器暂存就行了,

我来回复

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