我有一个汇编程序,它应该找到并打印出给定数组中的最大数字。我的问题是,我知道最大的数字是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
,这样就可以跳转到无符号比较的结果上。 -
有关打印值的方法,请参阅https://stackoverflow.com/tags/x86/info在";打印整数";。