|
主题 : : 用嵌套循环实现实验9 [已解决] |
回复[ 3次 ]
点击[ 381次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-07-29 08:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:3
注册日期:2009-06-08 15:13 |
完成实验9,一行一行的输出结果显得程序臃肿,为了巩用栈保护现场数据的应用,我决定用嵌套循环来实现,
第一层行数循环,内层字符输出循环,程序如下:
assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!'
data ends
stack segment
dw 0
stack ends
code segment
start: mov ax,data
mov es,ax
mov ax,0b800h
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,2 ;用于保护外层循环cx
mov bx,0
mov di,0
mov cx,3
mov bp,640h
s0:push cx
mov cx,16
s: mov al,es:[bx]
mov [bp+di],al
inc di
mov byte ptr [bp+di],02h
inc di
inc bx
loop s
add bp,100h ;为了换行
pop cx
mov bx,0
mov di,0
loop s0
mov ax,4c00H
int 21H
code ends
end start
没有错误,编译以后我对程序进行了跟踪,没有发现逻辑错误,但是没有显示结果,为什么? | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-07-29 09:27 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:3
注册日期:2009-06-08 15:13 |
进行这个实验我是想实现不止现实3行,而是可以轻易的改动显示多行 | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-07-29 09:52 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:3
注册日期:2009-06-08 15:13 |
程序已经改好,失误失误呵呵,如下:
assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!'
data ends
stack segment
dw 0
stack ends
code segment
start: mov ax,data
mov es,ax
mov ax,0b800h
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,2
mov bx,0
mov di,0
mov cx,8 ;修改此处数据可是实现任意行(<25)
mov bp,640h ;修改此处可以修好起始行位置
s0:push cx
mov cx,16
s: mov al,es:[bx]
mov ds:[bp+di],al
inc di
mov byte ptr ds:[bp+di],02h
inc di
inc bx
loop s
add bp,0a0h
pop cx
mov bx,0
mov di,0
loop s0
mov ax,4c00H
int 21H
code ends
end start | | |
|
|
|
|
[第3楼]
[ 回复时间:2009-07-29 14:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:3
注册日期:2009-06-08 15:13 |
此贴由 贴主 于 [ 2009-07-29 14:40 ] 结贴。 结贴原因:问题已解决 | | |
|