【发布时间】:2019-04-11 05:56:04
【问题描述】:
第一行是打印垃圾。
我试图切换偏移量、索引等。但无论字符串是什么,第一行总是错误的。
mov AX, 0b800h
mov ES, AX
nums db ' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 '
numsend label byte
;first row
MOV SI,OFFSET nums
MOV DI,160*4 +2 ;1st row,1st column, 2 cells per char
MOV AH, 07h
MOV CX,5*3;2 chars per digit, and 5 digit
row1:
MOV AL,[SI]
MOV ES:[DI],AX
INC SI
ADD DI,2
LOOP row1
;second row
MOV SI,OFFSET nums+15 ;point to the beginning of '_6 _7 _8 _9 10' from nums array
MOV DI,160*5 +2 ;2nd row,1st column, 2 cells per char
MOV AH, 07h
MOV CX,5*3 ;2 chars per digit, and 4 digit
row2:
MOV AL,[SI]
MOV ES:[DI],AX
INC SI
ADD DI,2
LOOP row2
;third row
MOV SI,OFFSET nums+30 ;point to the beginning of '11 12 13 14 15' from nums array
MOV DI,160*6 + 2*1 ;3rd row,1stcolumn,2 cells per char
MOV AH, 07h
MOV CX,5*3 ;2 chars per digit, and 4 digit
row3:
MOV AL,[SI]
MOV ES:[DI],AX
INC SI
ADD DI,2
LOOP row3
;fourth row
MOV SI,OFFSET nums+45 ;point to the beginning of ' 16 17 18 19 ' from nums array
MOV DI,160*7 + 2*1 ;4th row,1stcolumn,2 cells per char
MOV AH, 07h
MOV CX,5*3 ;2 chars per digit, and 4 digit
row4:
MOV AL,[SI]
MOV ES:[DI],AX
INC SI
ADD DI,2
LOOP row4
我预计:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19
但我总是得到: 随机 ascii 值(第一行)
6 7 8 9 10
11 12 13 14 15
16 17 18 19
【问题讨论】:
-
感谢您清楚地展示了所需的输出和实际输出。
-
您在
mov AX, 0b800h/mov ES, AX和其余代码之间有nums db!使用调试器单步执行您的代码,您应该会看到这些 ASCII 字节被解码为指令。大概这会破坏第一个空间或其他东西。那真的是minimal reproducible example吗?我没有看到任何 ORG 指令,也没有看到任何有关它运行的上下文的信息。MBR 引导加载程序、DOS .exe、DOS .com?