我的问题与使用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
请你解释一下我的功能有什么问题? 提前谢谢!
答案 0 :(得分:1)
问题中的程序不完整。缺少两条重要的路线:
MOV AX, @DATA
MOV DS, AX
Here我找到了这些目的。
下面列出了让我更改程序的内容。
我发现了一些事情:
所以我的程序现在看起来像这样:
.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 :(得分: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
尝试这个