打印阵列 - 获得奇怪的输出(emu8086)

时间:2016-02-29 20:54:16

标签: assembly emu8086

我的问题与使用8086汇编语言打印数组有关。 我使用'emu8086'程序。

下面这篇文章对我来说似乎很好(我是初学者),但我得到的结果是: * P000,而不是:12345。

  Main:

A DB 1,2,3,4,5 //my array

SUB SI, SI    //SI stands for counter and index here
LEA BX, A  

loop3:
MOV DX, [BX + SI] 

ADD DX, 30h //converting digit into character
MOV Ah, 2h
int 21h    //displaying the character in console window

INC SI
CMP SI, 5
JNE loop3             

end Main 

请你解释一下我的功能有什么问题? 提前谢谢!

3 个答案:

答案 0 :(得分:1)

问题中的程序不完整。缺少两条重要的路线:

    MOV AX, @DATA
    MOV DS, AX

Here我找到了这些目的。

下面列出了让我更改程序的内容。

  1. 我发现了good assembly program on this topic,基于此,我可以逐步分析每行代码并理解其含义。我认为这个程序解释了一切。
  2. 我发现了一些事情:

    所以我的程序现在看起来像这样:

        .MODEL SMALL
        .STACK 100H
    
        .DATA
        A DW 1, 2, 3, 4 ; it's my array
    
        .CODE   
    
        MAIN PROC
    
            MOV AX, @DATA
            MOV DS, AX
    
    
            LEA SI, A   ;set SI as offset address of A (of my array)
            MOV BX, 4   ;store the number of digits in BX register
            MOV CX, BX  ;CX is used as a loop counter
    
            LOOP1:
    
                MOV DX, [SI] ; Line 1
                ADD DX, 30h  ;convert digit to char and store in DX
    
                ;Print character stored in DX 
                MOV AH, 2h
                INT 21h
    
                ;Store in DX the ASCII code for 'space' character 
                MOV DX, 20h
                ;Print ' ' = space 
                INT 21h 
    
    
                ADD SI, 2 ;SI = SI + 2
    
            LOOP LOOP1 ; jump to label 'LOOP1' while CX != 0
    
        MAIN ENDP
    
    • 第1行的含义我找到here
    • Here我找到了用于打印字符的说明,并附有所有解释。
    • ASCII Table很有帮助。
    • 关于LOOP指示。

答案 1 :(得分:0)

您需要验证sumif寄存器是否加载了正确的值,否则您的内存读取将来自错误的段。

答案 2 :(得分:0)

.MODEL SMALL
.DATA

    ARRAY DW 1,2,3,4,5
.CODE
.STARTUP

  MOV CX,5      

 MOV SI,OFFSET ARRAY

LOP:
    MOV DX,[SI]  
    ADD DX,30H

    MOV AH,2H
    INT 21H  

    INC SI 
    INC SI

LOOP LOP
.EXIT
END

尝试这个