Assembly 用于查找数组中最大数的汇编语言程序
我有一个汇编程序,可以找到并打印出给定数组中的最大数。我的问题是,我知道最大的数字是ABh,但程序最多只能读取56h。我注意到它不能读大数字。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
以下是我更具体的问题:
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
似乎是错误的,因为数组包含7个元素,而不是15个0Fh
- 您还可能会有一个off by one错误,因为您的循环迭代
次,但在进入之前已经处理了数组的第0个元素。或者您希望将COUNT
设置为元素数减去1COUNT
- 这些都是8位整数,
可以很好地保存它们。但是AL
根据有符号比较的结果跳转。作为有符号8位整数,JNL
和9Ah
是负数,因此最大的元素实际上是ABh
。如果要将它们视为无符号的,请将56h
替换为JNL
,以便跳转到无符号比较的结果JNB
- 有关打印值的方法,请参阅“打印整数”下的链接
- 将
设置为COUNT
似乎是错误的,因为数组包含7个元素,而不是15个0Fh
- 您还可能会有一个off by one错误,因为您的循环迭代
次,但在进入之前已经处理了数组的第0个元素。或者您希望将COUNT
设置为元素数减去1COUNT
- 这些都是8位整数,
可以很好地保存它们。但是AL
根据有符号比较的结果跳转。作为有符号8位整数,JNL
和9Ah
是负数,因此最大的元素实际上是ABh
。如果要将它们视为无符号的,请将56h
替换为JNL
,以便跳转到无符号比较的结果JNB
- 有关打印值的方法,请参阅“打印整数”下的链接