【问题标题】:Assembly language program to find the largest number in an array汇编语言程序查找数组中的最大数
【发布时间】:2021-07-28 09:47:18
【问题描述】:

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

【问题讨论】:

    标签: assembly x86-16 unsigned signed emu8086


    【解决方案1】:
    • COUNT 设置为 0Fh 似乎是错误的,因为您的数组包含 7 个元素,而不是 15 个。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 2016-03-06
      • 1970-01-01
      • 2021-03-16
      • 2015-08-06
      • 2018-04-06
      相关资源
      最近更新 更多