关于P188实验九的问题求助
代码先给上:assume cs:code,ds:data
data segment
db 'welcome to masm!'
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0B800H
mov es,ax
mov bx,0
mov cx,16
mov ah,02H
s: mov al,ds:
mov es:,al
mov es:,ah
inc bx
inc bx
loop s
mov ax,4C00H
int 21H
code ends
end start
运行完后ES:0000内存如下!
为什么会这样?大佬们指点一下
es指向显存,显存中的内容在任何时刻都和屏幕上的东西一一对应
屏幕上有什么,显存中的内容就是什么
显存中的内容和屏幕上的内容一一对应
人造人 发表于 2020-5-15 00:44
es指向显存,显存中的内容在任何时刻都和屏幕上的东西一一对应
屏幕上有什么,显存中的内容就是什么
显存 ...
但是我给出的这串代码...是为了在屏幕上显示出“welcome to masm!”的绿色字体呀! s:
mov al,ds:
mov es:,al
mov es:,ah
inc bx
inc bx
将你程序中上面的改为下面的就对了:
mov bp,1610
s:
mov al,ds:
mov es:,al
mov es:,ah
inc bx
add bp,2 xie1234abc 发表于 2020-5-15 10:53
s:
mov al,ds:
mov es:,al
能解释下吗?能学到这里谁都不是想敷衍了事蒙混过关的 首先你的代码就是错误的,所以也就没有必要再说什么.根据作业要求来写代码 yjcoke 发表于 2020-5-15 18:15
首先你的代码就是错误的,所以也就没有必要再说什么.根据作业要求来写代码
请问我的代码不是为了实现作业要求?说代码错的您也不指出错在哪? Loser_YiMo 发表于 2020-5-15 22:50
请问我的代码不是为了实现作业要求?说代码错的您也不指出错在哪?
你是如何查看显存中的内容的?通过把显存中的内容输出到屏幕?
我不是说过了吗,显存中的内容和屏幕上的内容一一对应
你怎么能通过把显存中的内容输出到屏幕,这种方法来查看显存中的内容呢?
本帖最后由 xie1234abc 于 2020-5-15 23:33 编辑
inc bx
inc bx
'welcome to masm!'
自加两次后,W读了,就读到L上去了,读不到中间的e
读出来的将是“Wloet a…………”
正确改法:
s:mov al,ds:
mov es:,al
mov es:,ah
inc bx
inc bx
将你程序中上面的改为下面的就对了:
mov bp,1610
s: mov al,ds:
mov es:,al
mov es:,ah
inc bx ;bx只自加一次
add bp,2 Loser_YiMo 发表于 2020-5-15 22:50
请问我的代码不是为了实现作业要求?说代码错的您也不指出错在哪?
如果我没有记错的话,这道题目的要求是 将wel的欢迎语句显示在屏幕的中间,显示三行,另外每行配上对应的颜色.
所以你看你的代码,颜色属性只有一个.然后起始位置还是0..屏幕的尺寸是25*80所以以行为中间应该是从12行开始.以列为中间,应该是11*160然后再加上第12行的中间距离..大概就是这个意思. 本帖最后由 boling 于 2021-10-13 05:08 编辑
assume cs:code,ds:data
data segment
db 'welcome to masm!'
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0B800H
mov es,ax
mov bx,0
mov cx,16
mov ah,02H ;颜色值
mov bp,2000;这个值是为了在屏幕中间显示
s: mov al,ds:
mov es:,al
mov es:,ah
inc bx
add bp,2
loop s
mov ax,4C00H
int 21H
code ends
end start
刚刚测试一下,这样就可以了
页:
[1]