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



我有一个汇编程序,它应该找到并打印出给定数组中的最大数字。我的问题是,我知道最大的数字是ABh,但程序最多只能读取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个。

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

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

  • JNL基于有符号比较的结果跳转。作为有符号的8位整数,9AhABh是负的,因此最大的元素实际上是56h。如果要将它们视为无符号,请将JNL替换为JNB,这样就可以跳转到无符号比较的结果上。

  • 有关打印值的方法,请参阅https://stackoverflow.com/tags/x86/info在";打印整数";。

相关内容

  • 没有找到相关文章

最新更新