|
主题 : : 实验九花了我一天的时间,贴出来供讨论 [已解决] |
回复[ 6次 ]
点击[ 527次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-07-18 12:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:3
信誉值:0
注册日期:2008-06-04 16:24 |
一、我的编程思想:仔细阅读实验九给的材料得知要在B8000--B8F9F中写入数据,数据包含两个属性:一个是字符颜色 二是写入的字符串内容。
A、字符的颜色如何配置:由设置属性字节配出如下:
a、绿色 00000010B 02H
b、绿底红字 00100100B 24H
c、白底蓝色 01110001B 71H
B、算出屏幕中间所放字符串(带颜色属性)的偏移地址 (段地址:B800H)
因为一屏显示25行,每行160个字节 那么中间三行就是:12行、13行、14行,又因为字符在每行的中间,则可得出每串字符的首偏移地址为:720H、7C0H、860H
知道了这么多那么编程就好办了,编程如下:
——————————————————————————————————————
assume cs:codesg
data segment
db'welcome to masm!' ;定义显示的字符串
data ends
stacksg segment
dw 02h,24h,71h,0 ;定义颜色值,后面还将此做为栈使用 我这样做不知道会不会有问题?
stacksg ends
codesg segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov bx,0
mov ax,stacksg
mov ss,ax
mov sp,8h
mov cx,3h
mov bp,0
s0:push cx ;保护外循环进栈
mov cx,10h ;设置内循环16次
mov si,0
mov di,0
s: mov al,ds:[di] ;取出字符放在al中
mov ah,ss:[bp] ;颜色值直接赋值到ah中
mov es:[si+720h+bx],ax ;将ax值存到08b00h:720h内存单元处,让字符在屏幕的第12行中间显示出来
add si,2
inc di
loop s
add bp,2
add bx,0a0h ;换到下一行
pop cx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
-----------------------------------------------------------
调试通过了 ,但中间提出的问题希望有人能帮我解解,那个段总感觉有点不对劲 呵呵 | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-07-18 13:01 ]
[引用]
[回复]
[ top ] | |
荣誉值:188
信誉值:4
注册日期:2009-07-05 19:26 |
dw 02h,24h,71h,0 ;定义颜色值,后面还将此做为栈使用 我这样做不知道会不会有问题?
=================================================================================
手上没有编译器调试,觉得有问题,楼主说调试通过了,可能是整体运行吧,单步执行的话应该是有问题的
栈设得很小,而且栈中数据又是要用的,单步执行会有中断数据进入,会造成数据覆盖
楼主自己单步调试下,看下栈中数据的变化就知道了 | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-07-18 13:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
|
|
|
|
|
[第3楼]
[ 回复时间:2010-07-19 10:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:0
注册日期:2010-07-09 09:48 |
我想楼主的本意是用栈保存字符属性,作为一个空栈使用。在s0循环里面,cx的值始终存放在字单元ss:[6h]里面。
能否将栈设置大些,这样做单步调试就不会出问题了。1楼说的,单步调试中断数据进入栈不知是咋回事,还没学到中断哪章。我觉得可以这样,s0循环里面每次将字符属性依次入栈,在s循环做出栈,只要不弄错次序应该没有问题的。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-07-19 11:33 ]
[引用]
[回复]
[ top ] | |
荣誉值:3
信誉值:0
注册日期:2008-06-04 16:24 |
为什么要把颜色值放在栈中呢?
------------------
回复: 定义了dw 02h,24h,71h,0 既解决三次颜色的循环 又可以保存CX的值 觉得这样很好啊
谢谢各位的回复 中断我还没学到 | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-07-19 13:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
|
|
|
|
|
[第6楼]
[ 回复时间:2010-07-23 17:11 ]
[引用]
[回复]
[ top ] | |
荣誉值:3
信誉值:0
注册日期:2008-06-04 16:24 |
此贴由 贴主 于 [ 2010-07-23 17:11 ] 结贴。 结贴原因:问题已解决 | | |