assembly 将数组中的元素进行排序,并将每个元素存储在汇编8086中的寄存器中

plupiseo  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(52)

我试图访问一个数组,每次迭代我都将元素的值存储在寄存器AL中。我访问的数组是一个从用户那里获取值的数组,我输入的值是(12134)。
问题是,当我试图在过程中访问数组的每个元素并将其存储在寄存器AL中时,错误的值被存储为(31),这是第一个元素,第二个元素被存储为(32)在AL中。我试图知道这个值背后的原因,但无法弄清楚。提前感谢。
注意:我提供了第一次迭代时寄存器的屏幕截图,以便沿着代码进一步说明

;read and access array

DIM EQU 5 

.MODEL small
.STACK
.DATA   

arr DB DIM DUP(?)  

.CODE
.STARTUP  

MOV BX, OFFSET arr  ;Storing the address of arr to bx
CALL READ           ; Calling the read procedure to input data into arr

MOV BX, OFFSET arr  ;Storing the address of arr to bx
CALL arr_acc        ;Calling the procedure that should access each element of the array and store each element
                    ;in AL with every iteration
       
.EXIT

; PROCEDURES

; Read PROC 
    
MOV DI, 0 
MOV AH, 1 ; set AH for reading 

lab1:   INT 21H ; read a character
        MOV BX[DI], AL ; store the character
        INC DI ; go to next element
        CMP DI, DIM ; compare array index with 0
        JNE lab1 ; jump if not equal

RET 

Read ENDP  

arr_acc PROC
     
MOV AX,0
MOV DI,0 

lop: CMP DI,DIM                ; checking if the DI reached the maximum index DIM
     JE  EXIT_LOP              ;exit the lop which will exit the procedure as well
     MOV AL, BX[DI]            ; Moving the first element in AL
     INC DI                    ; increment DI to get to the next element
     JMP lop                   ; jump back to the loop
                                
EXIT_LOP:    

RET
arr_acc ENDP 

END

字符串
enter image description here
enter image description here
尝试:
1.我试着用SI寄存器代替DI寄存器
1.只使用BX并将其递增1,因为它是一个字节数组

j2cgzkjk

j2cgzkjk1#

我从用户那里得到了它的值,我输入的值是(12134)。存储的错误值是(31),这是第一个元素,第二个元素在AL中存储为(32)
想一想你的问题的读者在这里要处理什么!你括号里的数字(12134,31和32)看起来都像普通的十进制数,但只有专业读者才能看穿这一点,并理解31和32将是从调试器屏幕上获得的十六进制数字。请善待读者,并将这些写为31h和32h。或者使用0x31和0x32。

为什么会有问题

DOS.GetCharacter函数01 h以字符代码(ASCII)响应。对于键0到9,您将获得范围为48到57的ASCII代码。在使用输入之前,您应该将字符代码转换为所涉及数字的标称值。转换简单地减去48,我们通常将其写为sub al, '0'

相关问题