汇编找错
assume cs:code,ds:datadata segment
db 'w'
db 02H
data ends
code segment
start: mov ax, data
mov ds,ax
mov ax,0b800H
mov es,ax
mov bx,0
mov si,1
mov al,ds:
mov es:,al
mov es:,ah
mov ax,4c00h
int 21h
code ends
end start
我只是想把W这个字符,显示在屏幕上,显示成绿色,显示在屏幕的最右上角,为什么显示不了,怎么想都想不明白哪里错了! 从您的代码中,我注意到一些问题,并提供以下更改建议:
1. 在数据段声明之后,需要在代码段中声明起始点“ start :”,以便程序运行时知道从哪里开始执行。
2. 在将DS寄存器设置为数据段之后,请确保使用 前缀操作数访问数据。
3. 在设置ES寄存器为B800H时,需要通过选择颜色模式来确定控制台前景(字符)和背景颜色。您可以通过计算相应的显存偏移量来保存字符和颜色属性。对于深绿色,前景颜色值为02h(0010b),背景颜色值为00h(0000b)。
4. 最后,您正在使用int 21h调用来终止程序,不幸的是这是一个DOS系统调用用于结束当前进程,并不适用于Windows上的控制台程序。您可以考虑使用 ret 指令代替 int 21h 来正确退出。
请注意,下面的代码片段可能不够全面,无法完全解决所有与您的代码相关的问题。但它提供了一个优化的版本,如果遵循上述更改建议,它应该可以满足您想要实现的功能。
data segment
db 'W'
data ends
code segment
start:
mov ax, @data
mov ds, ax
mov ax, 0B800h
mov es, ax
; 确定字符和属性的偏移量
mov bx, 79 ; 右上角第一下标
mov si, 0 ; 字符串偏移量(“W”)
mov dx, 5 ; 行号为5
mul byte ptr dx; 计算行偏移量
mov dx, 6 ; 列号为6
shl dx, 1 ; 计算列偏移量
add bx, dx ; 计算总偏移量
; 将字符写入显存
mov di, bx
mov al,
mov es:, al
; 设置颜色属性并将其写入显存
mov ah, 2; 前景为深绿色
mov al, 0; 背景为黑色
shl ah, 4; 向左移动4位设置前景颜色值
mov es:, ah ; 将属性写入相邻的偏移位置
; 正确退出程序
ret
code ends
end start
求最佳答案
页:
[1]