Assembly 用于查找数组中最大数的汇编语言程序

Assembly 用于查找数组中最大数的汇编语言程序,assembly,x86-16,unsigned,signed,emu8086,Assembly,X86 16,Unsigned,Signed,Emu8086,我有一个汇编程序,可以找到并打印出给定数组中的最大数。我的问题是,我知道最大的数字是ABh,但程序最多只能读取56h。我注意到它不能读大数字。 以下是我更具体的问题: 9Ah和ABh有多少位 如果这些数字不能存储在AL寄存器中,我如何存储这些值并比较它们以找到最大值 代码如下: .MODEL SMALL READ MACRO MSG MOV AH,0AH LEA DX,MSG INT 21H ENDM PRINT MACRO MSG MOV AH,09H

我有一个汇编程序,可以找到并打印出给定数组中的最大数。我的问题是,我知道最大的数字是ABh,但程序最多只能读取56h。我注意到它不能读大数字。
以下是我更具体的问题:

  • 9Ah和ABh有多少位
  • 如果这些数字不能存储在
    AL
    寄存器中,我如何存储这些值并比较它们以找到最大值
  • 代码如下:

    .MODEL SMALL
     
    READ MACRO MSG
        MOV AH,0AH
        LEA DX,MSG
        INT 21H
    ENDM
    
    PRINT MACRO MSG
        MOV AH,09H
        LEA DX,MSG
        INT 21H
    ENDM
    
    .STACK 100H
    
    ASSUME CS:CODE, DS:DATA
    DATA SEGMENT 
     
     CR EQU 0DH
     LF EQU 0AH
        MSG1 DB "The array is: 52H,23H,56H,45H,9AH,ABH$"
        MSG2 DB CR,LF,"The largest number is: $"
        LIST DB 52H,23H,56H,45H,45H,9AH,0ABH
        COUNT EQU 0Fh 
        LARGEST DB 04H DUP (?)
        
    DATA ENDS
        
    CODE SEGMENT
    
    START:
            MOV AX,DATA
            MOV DS,AX
            
            PRINT MSG1
            
            MOV SI,OFFSET LIST
            MOV CL,COUNT
            MOV AL,[SI]
            
    AGAIN:  CMP AL,[SI+1]
            JNL NEXT
            MOV AL,[SI+1]
    
    NEXT:   INC SI
            DEC CL
            JNZ AGAIN
            
            MOV SI,OFFSET LARGEST
            MOV [SI],AL
            
            ;HOW TO PRINT VALUE OF AL?
            
            
            MOV AH,4CH
            INT 21H
            
    CODE ENDS
    END START        
    
    • COUNT
      设置为
      0Fh
      似乎是错误的,因为数组包含7个元素,而不是15个

    • 您还可能会有一个off by one错误,因为您的循环迭代
      COUNT
      次,但在进入之前已经处理了数组的第0个元素。或者您希望将
      COUNT
      设置为元素数减去1

    • 这些都是8位整数,
      AL
      可以很好地保存它们。但是

    • JNL
      根据有符号比较的结果跳转。作为有符号8位整数,
      9Ah
      ABh
      是负数,因此最大的元素实际上是
      56h
      。如果要将它们视为无符号的,请将
      JNL
      替换为
      JNB
      ,以便跳转到无符号比较的结果

    • 有关打印值的方法,请参阅“打印整数”下的链接

        • COUNT
          设置为
          0Fh
          似乎是错误的,因为数组包含7个元素,而不是15个

        • 您还可能会有一个off by one错误,因为您的循环迭代
          COUNT
          次,但在进入之前已经处理了数组的第0个元素。或者您希望将
          COUNT
          设置为元素数减去1

        • 这些都是8位整数,
          AL
          可以很好地保存它们。但是

        • JNL
          根据有符号比较的结果跳转。作为有符号8位整数,
          9Ah
          ABh
          是负数,因此最大的元素实际上是
          56h
          。如果要将它们视为无符号的,请将
          JNL
          替换为
          JNB
          ,以便跳转到无符号比较的结果

        • 有关打印值的方法,请参阅“打印整数”下的链接