. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验九 丢失字母,求助  [待解决] 回复[ 3次 ]   点击[ 375次 ]  
asongsky
[帖 主]   [ 发表时间:2009-07-26 23:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-07-10 14:13
assume cs:code
data segment
db 'welcome to masm!'
db 00000010b,00100100b,01110001b
data ends
code segment
start:mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov ax,0
mov dp,16
mov di,0
mov cx,12                       :计算屏幕中间的位置,12*160
s:add ax,160
loop s
add ax,64                       :同上,加64
mov bx,ax
mov cx,3
s1:mov si,0
mov dx,cx
mov cx,16
s0:mov al,[di]
mov es:[bx+si],al               :将字母输入内存
mov al,[dp]
mov es:[bx+si+1],al             :将颜色输入内存
add si,2                        
inc di
loop s0
add bx,160
inc dp
mov cx,dx
loop s1
mov ax,4c00h
int 21h
code ends
end start
最终调试时只能显示wloet am,有一半的字母没显示,-d b800:7b0                     
B800:07B0  20 07 20 07 20 07 20 07-20 07 20 07 20 07 20 07    . . . . . . . .
B800:07C0  77 65 6C 63 6F 6D 65 20-74 6F 20 6D 61 73 6D 21   welcome to masm!
B800:07D0  02 07 20 07 20 07 20 07-20 07 20 07 20 07 20 07   .. . . . . . . .
B800:07E0  20 07 20 07 20 07 20 07-20 07 20 07 20 07 20 07    . . . . . . . .
D命令查看倒是能看到全部字母,实在想不通还哪不对了
younggay
[第1楼]   [ 回复时间:2009-07-27 10:26 ]   [引用]   [回复]   [ top ] 
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
程序编译还有问题呢。哪有dp的寄存器啊?
younggay
[第2楼]   [ 回复时间:2009-07-27 10:29 ]   [引用]   [回复]   [ top ] 
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
如果发现你的字符串只显示一半,首先看看是不是后面的字母是不是不能够继续进行了,然后再看这些字母是不是写入了正确的显存位置。

楼主到了这里了,排查这种错误应该有一定经验了,debug下T单步观察数据操作吧。

当然,首先要把你的程序改的能够编译连接成功。
mfksoft
[第3楼]   [ 回复时间:2009-11-30 18:22 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-11-24 13:19
你写显存的方式是错误的,显存里面偶数字节是存放显示内容,奇数字节是存放颜色等属性的
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved