寻找数组中最大数的汇编语言程序

Assembly language program to find the largest number in an array

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

  1. 9Ah和ABh有多少位?
  2. 如果这些数字不能存储在 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 个。

  • 您可能还会遇到差一错误,因为您的循环迭代了 COUNT 次但在进入之前已经处理了数组的第 0 个元素。或者你想将 COUNT 设置为元素数减去 1.

  • 这些都是8位整数,AL能装下就好了。但是...

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

  • 有关打印值的方法,请参阅“打印整数”下 https://whosebug.com/tags/x86/info 处的链接。