|
主题 : : 实验10 第一个显示字符子程序问题 [已解决] |
回复[ 7次 ]
点击[ 393次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-12-04 13:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:16
注册日期:2009-10-21 20:01 |
我想先测试一下,在第8行显示字符,按照80*25的彩色字符显示模式,第8行应是由这开始B800:0460
但我的初步程序单步运行时,字符却是显示在第 4 行 ,为何,如何将dh改为 12 ,则字符显示在第 8 行,好像总是相差 4 行,以下代码是哪里导致了这种情况的出现?
在debug状态下,用e命令在B800:0460又是正确的显示在第8行。
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: push cx
push dx
mov ax,0b800h
mov es,ax
mov al,0A0h
pop dx
dec dh
mul dh
s: mov ch,0
mov cl,[si]
jcxz ok
mov bp,ax
mov bl,[si]
mov bh,cl
mov es:[bp],bx
inc si
jmp short s
ok: ret
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-12-04 14:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:16
注册日期:2009-10-21 20:01 |
偶把代码最简单化,修改成这个样子,依旧是从第4行显示。
B800:0460不是指向显示缓存的第8行吗?
assume cs:code
code segment
start:
mov ax,0b800h
mov es,ax
mov ax,0460h
mov bp,ax
mov bx,0257h
mov es:[bp],bx
code ends
end start | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-12-04 18:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:16
注册日期:2009-10-21 20:01 |
以下程序按照题意,那就是在屏幕的第9行,第4列显示结果了。
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start:mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
mov bh,cl
call show_str
mov ax,4c00h
int 21h
show_str: push cx
push dx
mov ax,0b800h
mov es,ax
mov al,0A0h
pop dx
mul dh
mov bp,ax
mov ax,0
mov al,2
mul dl
mov di,ax
s: mov ch,0
mov cl,[si]
jcxz ok
mov bl,[si]
mov es:[bp+di],bx
inc si
add di,2
jmp short s
ok: pop cx
ret
code ends
end start | | |
|
|
|
|
[第3楼]
[ 回复时间:2009-12-04 18:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:188
信誉值:4
注册日期:2009-07-05 19:26 |
B800:0460不是指向显示缓存的第8行吗?
=================================================
;参数:(dh)=行号(取值范围0~24);
; (dl)=列号(取值范围0~79);
mov ax,0b800h
mov es,ax
mov bx,(160*dh+dl*2)
(160*dh+dl*2)设置es:bx指向显存首地址 | | |
|
|
|
|
[第4楼]
[ 回复时间:2009-12-04 18:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:188
信誉值:4
注册日期:2009-07-05 19:26 |
|
|
|
|
|
[第5楼]
[ 回复时间:2009-12-04 18:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:188
信誉值:4
注册日期:2009-07-05 19:26 |
|
|
|
|
|
[第6楼]
[ 回复时间:2009-12-04 23:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:16
注册日期:2009-10-21 20:01 |
谢谢楼上的。。。。就是想搞清楚是由0开始还是由1开始算这个数。 | | |
|
|
|
|
[第7楼]
[ 回复时间:2009-12-04 23:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:16
注册日期:2009-10-21 20:01 |
此贴由 贴主 于 [ 2009-12-04 23:07 ] 结贴。 结贴原因:问题已解决 | | |