Loser_YiMo 发表于 2020-5-15 00:06:13

关于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内存如下!
为什么会这样?大佬们指点一下

人造人 发表于 2020-5-15 00:44:01

es指向显存,显存中的内容在任何时刻都和屏幕上的东西一一对应
屏幕上有什么,显存中的内容就是什么
显存中的内容和屏幕上的内容一一对应

Loser_YiMo 发表于 2020-5-15 02:58:01

人造人 发表于 2020-5-15 00:44
es指向显存,显存中的内容在任何时刻都和屏幕上的东西一一对应
屏幕上有什么,显存中的内容就是什么
显存 ...

但是我给出的这串代码...是为了在屏幕上显示出“welcome to masm!”的绿色字体呀!

xie1234abc 发表于 2020-5-15 10:53:39

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

Loser_YiMo 发表于 2020-5-15 15:12:05

xie1234abc 发表于 2020-5-15 10:53
s:
    mov al,ds:
    mov es:,al


能解释下吗?能学到这里谁都不是想敷衍了事蒙混过关的

yjcoke 发表于 2020-5-15 18:15:44

首先你的代码就是错误的,所以也就没有必要再说什么.根据作业要求来写代码

Loser_YiMo 发表于 2020-5-15 22:50:51

yjcoke 发表于 2020-5-15 18:15
首先你的代码就是错误的,所以也就没有必要再说什么.根据作业要求来写代码

请问我的代码不是为了实现作业要求?说代码错的您也不指出错在哪?

人造人 发表于 2020-5-15 22:55:50

Loser_YiMo 发表于 2020-5-15 22:50
请问我的代码不是为了实现作业要求?说代码错的您也不指出错在哪?

你是如何查看显存中的内容的?通过把显存中的内容输出到屏幕?
我不是说过了吗,显存中的内容和屏幕上的内容一一对应

你怎么能通过把显存中的内容输出到屏幕,这种方法来查看显存中的内容呢?

xie1234abc 发表于 2020-5-15 23:23:09

本帖最后由 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

yjcoke 发表于 2020-5-16 10:57:52

Loser_YiMo 发表于 2020-5-15 22:50
请问我的代码不是为了实现作业要求?说代码错的您也不指出错在哪?

如果我没有记错的话,这道题目的要求是 将wel的欢迎语句显示在屏幕的中间,显示三行,另外每行配上对应的颜色.
所以你看你的代码,颜色属性只有一个.然后起始位置还是0..屏幕的尺寸是25*80所以以行为中间应该是从12行开始.以列为中间,应该是11*160然后再加上第12行的中间距离..大概就是这个意思.

boling 发表于 2021-10-13 05:06:43

本帖最后由 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]
查看完整版本: 关于P188实验九的问题求助