我正在测试一个TASM程序来设置背景颜色并输出一个字符串。但我犯了错误。
.model small
.stack 100h
.data
prompt db 13, 10, 'Hello Gaiz!', '$'
.code
start:
call color ; Call the color procedure to set the background color
call output
mov ax, 4C00h ; Exit program
int 21h
output proc
mov ah, 09h
lea dx, prompt
int 21h
ret
output endp
color proc
MOV AH, 06h ; Scroll up function
XOR AL, AL ; Clear entire screen
XOR CX, CX ; Upper left corner CH=row, CL=column
MOV DX, 184FH ; lower right corner DH=row, DL=column
MOV BH, 42H ; Red and Green
INT 10H
ret
color endp
end start
运行时,随机字符和不正确执行.
1条答案
按热度按时间8ulbf1ek1#
你传递给DOS的指针实际上是DS:DX。遗憾的是,您忘记在程序开始时初始化DS段寄存器。对于这个使用
small
模型的**.EXE程序**,DS默认将指向PSP(程序段前缀)。只需在您的程序旁边添加:也可以简单一点
开始开发**.COM程序**。设置段寄存器没有问题,因为它们开始时彼此相等(CS=DS=ES=SS):