鱼C论坛

 找回密码
 立即注册
查看: 709|回复: 1

汇编找错

[复制链接]
发表于 2023-6-21 18:02:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
assume cs:code,ds:data
data 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:[0]
                mov es:[bx],al       
       
                mov es:[bx+1],ah
                mov ax,4c00h
                int 21h
code ends
end start

       

                            我只是想把W这个字符,显示在屏幕上,显示成绿色,显示在屏幕的最右上角,为什么显示不了,怎么想都想不明白哪里错了!         
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-21 18:37:48 | 显示全部楼层
从您的代码中,我注意到一些问题,并提供以下更改建议:

1. 在数据段声明之后,需要在代码段中声明起始点“ start :”,以便程序运行时知道从哪里开始执行。

2. 在将DS寄存器设置为数据段之后,请确保使用  [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, [ds:si]
    mov es:[di], al

    ; 设置颜色属性并将其写入显存
    mov ah, 2  ; 前景为深绿色
    mov al, 0  ; 背景为黑色
    shl ah, 4  ; 向左移动4位设置前景颜色值
    mov es:[di+1], ah ; 将属性写入相邻的偏移位置

    ; 正确退出程序
    ret
code ends

end start

求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 00:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表