寻找数组中最大数的汇编语言程序
Assembly language program to find the largest number in an array
我有一个汇编程序可以找到并打印出给定数组中的最大数字。我的问题是我知道最大的数字是 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 个。
您可能还会遇到差一错误,因为您的循环迭代了 COUNT
次但在进入之前已经处理了数组的第 0 个元素。或者你想将 COUNT
设置为元素数减去 1.
这些都是8位整数,AL
能装下就好了。但是...
JNL
根据有符号比较的结果跳转。作为有符号的 8 位整数,9Ah
和 ABh
是负数,因此最大元素确实是 56h
。如果您想将它们视为无符号,请将 JNL
替换为 JNB
,以便您跳转到无符号比较的结果。
有关打印值的方法,请参阅“打印整数”下 https://whosebug.com/tags/x86/info 处的链接。
我有一个汇编程序可以找到并打印出给定数组中的最大数字。我的问题是我知道最大的数字是 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 个。您可能还会遇到差一错误,因为您的循环迭代了
COUNT
次但在进入之前已经处理了数组的第 0 个元素。或者你想将COUNT
设置为元素数减去 1.这些都是8位整数,
AL
能装下就好了。但是...JNL
根据有符号比较的结果跳转。作为有符号的 8 位整数,9Ah
和ABh
是负数,因此最大元素确实是56h
。如果您想将它们视为无符号,请将JNL
替换为JNB
,以便您跳转到无符号比较的结果。有关打印值的方法,请参阅“打印整数”下 https://whosebug.com/tags/x86/info 处的链接。