|
主题 : : 实验九可编译,就是只能显示一行!求高手指正 [待解决] |
回复[ 3次 ]
点击[ 236次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2011-02-07 14:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-01 22:18 |
assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!'
db 2h,24h,1h
data ends
stack segment
db 64 dup (0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,64 ;定义栈段
mov cx,3 ;循环3次
mov bx,0
mov ax,0b86eh
mov si,40h
mov di,10h ;找出显存中的行列
s1:
push cx
mov es,ax
mov ax,data
mov ds,ax
mov ah,[di]
mov cx,16
inc di
s: mov al,[bx]
mov es:[si],ax
inc bx
add si,2
loop s
pop cx
add ax,0a0h
loop s1
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2011-02-07 14:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-01 22:18 |
补充:可以编译出exe文件。但是在单步调试过程中会在其中某一步自动退出 | | |
|
|
|
|
[第2楼]
[ 回复时间:2011-02-07 23:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
按照楼主的思路修改的,测试通过。
assume cs:code,ds:data
data segment
db 'welcome to masm!'
db 2h,24h,1h
data ends
code segment
start:
;定义数据段和附加段最后在程序开始的时候
mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov cx,3
mov bx,0
mov di,160*12+40*2 ;显存地址
mov si,10h ;字符属性地址
s1: push di ;暂存显存地址
push cx ;计数器入栈保存
push bx ;字符首地址入栈
mov ah,[si]
mov cx,16
s: mov al,[bx]
mov es:[di],ax
inc bx
add di,2
loop s
pop bx ;恢复字符首地址
pop cx ;恢复计数器
pop di ;恢复显存地址
add di,0a0h ;显存地址指向下一行
inc si ;指向下一个字符属性
loop s1
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第3楼]
[ 回复时间:2011-02-07 23:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
|
|