水月同洲 发表于 2014-4-18 18:04:55

王爽汇编第九章实验9

连续输出3行字符试了几次都做不到,所以写了输出一行字符的。但是编译失败提示什么溢出

assumecs:code,ds:data
data segment

   db 'welcome to masm!'
   db '2h,24h,71h'    \颜色的值\

data ends

code segment

start:   

   mov ax,data
   mov ds,ax         

   mov ax,0b800h   \第一个要输出字符的地址\
   mov ss,ax      
   mov si,720h   

   mov di,0
   mov bx,0

   mov ax,16
   mov cx,ax

   s:mov ss:,ds:\将字符送入对应地址\   
   inc di
   inc bx

   mov ax,16
   mov ss:,ds: \将颜色值送入对应地址\
   inc bx
   loop s

   mov ax,4c00h
   int 21h

code ends

end start

青玄 发表于 2014-4-18 18:04:56


嗯...,你犯了一个严重的错误啊!两个内存的值是不能相互传递的,必须通过AX来进行传递,以下的代码编译没问题,你看一下:

assumecs:code,ds:data
data segment

   db 'welcome to masm!'
   db '2h,24h,71h'   ;颜色的值

data ends

code segment

start:   

   mov ax,data
   mov ds,ax         

   mov ax,0b800h   ;第一个要输出字符的地址
   mov es,ax      
      mov si,720h   ;ss:si是显存的位置

   mov di,0
   mov bx,0

   mov ax,16
   mov cx,ax   ;这样循环16次

   s:
   mov ax,ds:
   mov es:,ax   ;将字符送入对应地址 注意这里是不能讲一个内存的值传递想另一个内存的值的,必须先把它放在ax里面
   inc di
   inc bx

   mov bx,16
   mov ax,ds:
       mov es:,ax;将颜色值送入对应地址   注意这里是不能讲一个内存的值传递想另一个内存的值的,必须先把它放在ax里面
   inc bx
   loop s

   mov ax,4c00h
   int 21h

code ends

end start


青玄 发表于 2014-4-18 18:42:05

嗯!这样吧!这个程序没问题,你看一下吧!

assume cs:code,ds:data

data segment

   db 'welcome to masm!'

data ends

code segment

start:   mov ax,data

   mov ds,ax

   mov bx,0               ;ds:bx指向data字符串

   mov ax,0b800h

   mov es,ax

   mov si,0               ;es:si指向显存

   mov cx,16

s:   mov al,            ;字符赋值al

   mov ah,02h             ;绿色

   mov es:.720h,ax    ;写入第12行64列

   mov ah,14h             ;绿底红色

   mov es:.7c0h,ax    ;写入第13行64列

   mov ah,71h             ;白底蓝色

   mov es:.860h,ax    ;写入第14行64列

   inc bx               ;指向下一字符

   add si,2               ;指向下一显存单元

   loop s

   mov ax,4c00h

   int 21h

code ends

end start




水月同洲 发表于 2014-4-18 18:46:46

青玄 发表于 2014-4-18 18:42 static/image/common/back.gif
嗯!这样吧!这个程序没问题,你看一下吧!

assume cs:code,ds:data


可以告诉我的那个代码那里错了么

ck329054222 发表于 2014-4-18 20:58:13

s:mov ss:,ds:
你确定这样能行?

水月同洲 发表于 2014-4-18 21:14:04

青玄 发表于 2014-4-18 18:04 static/image/common/back.gif
嗯...,你犯了一个严重的错误啊!两个内存的值是不能相互传递的,必须通过AX来进行传递,以下的代码编译没 ...

谢谢,我只看到有寄存器要通过通用寄存器传递,都没看到内存也要,不知道是我看过忘记了,还是没仔细看视频

艾蒙·瓦特 发表于 2014-4-21 14:59:42

mov es:.720h,ax    ;写入第12行64列
为什么它代表12行64列,可以解释一下嘛

水月同洲 发表于 2014-4-22 16:08:29

艾蒙·瓦特 发表于 2014-4-21 14:59 static/image/common/back.gif
mov es:.720h,ax    ;写入第12行64列
为什么它代表12行64列,可以解释一下嘛

我用的是王爽的汇编语言这本书,第九章 实验9 资料上面有显示器有25行每行有80个字符,每个字符有256种属性。也就是说一个字符要两字节储存一个字节存字符,一个字节存字符的属性。80个字符一行就是160字节,12行第64列也是就(12*80+64)*2,结果是720H是16进制,10进制是1824,

lurning 发表于 2014-4-23 22:00:48

水月同洲 发表于 2014-4-22 16:08 static/image/common/back.gif
我用的是王爽的汇编语言这本书,第九章 实验9 资料上面有显示器有25行每行有80个字符,每个字符有256种属 ...

请问我赋值的王爽答案的代码,编译成功后,我用cmd运行,就闪了一下屏幕,没有出现文字是什么原因

lm2wq 发表于 2014-4-23 22:16:49

我也遇到了楼上说的问题,一闪而过,没显示:mad:

水月同洲 发表于 2014-4-24 03:02:10

我也出了这个问题,我还发了求助贴,但是手贱按错了不小心给力最佳答案,

艾蒙·瓦特 发表于 2014-4-25 22:29:50

水月同洲 发表于 2014-4-22 16:08 static/image/common/back.gif
我用的是王爽的汇编语言这本书,第九章 实验9 资料上面有显示器有25行每行有80个字符,每个字符有256种属 ...

12*80+64=1024   再乘以2十进制应该是2048十六进制是800H

水月同洲 发表于 2014-4-26 02:35:40

艾蒙·瓦特 发表于 2014-4-25 22:29 static/image/common/back.gif
12*80+64=1024   再乘以2十进制应该是2048十六进制是800H

:dizzy:没注意不好意思书上的...开始地址应该是11行第32个字符是起始地址。我那个是自己另外写的

AIkiller 发表于 2014-11-26 11:22:17

跪求解释:本实验中我将按源代码敲进去或将源代码复制过去编译运行后,cmd一闪而过,根本没有显示文字什么的!(系统为win7旗舰版)
页: [1]
查看完整版本: 王爽汇编第九章实验9