|
主题 : : 实验9 我疯了 内附程序和注释 感觉明明对的呀 [待解决] |
回复[ 3次 ]
点击[ 287次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2011-09-03 10:25 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-08-19 19:27 |
我是先看了答案再写的 唉~
Assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!'
db 2h,24h,71h
data ends
stack segment
dw 8 dup (0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov ax,0b872h ;显存第12行的中间位置
mov bx,0
mov si,0
mov di,0
mov cx,3 ;外循环3次 显示三次字符串
s:
push cx ;cx压栈
push ax ;ax压栈 每循环一次 显存位置就要移到下一行
mov si,0
mov di,0
mov es,ax
mov cx,16 ;循环16次 依次把字符串传到0b872:[di]里
s1:
mov al,[si]
mov es:[di],al
inc si
add di,2
loop s1
mov si,1 ;显存的奇地址是显示颜色的
mov al,[10h+bx] ;取色值 放入al中
mov cx,16
s2:
mov es:[si],al
add si,2
loop s2
pop ax
add ax,160
add bx,1
pop cx
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2011-09-03 10:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-08-19 19:27 |
晕了 还没写好 接着来
Assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!'
db 2h,24h,71h
data ends
stack segment
dw 8 dup (0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov ax,0b872h ;显存第12行的中间位置
mov bx,0
mov si,0
mov di,0
mov cx,3 ;外循环3次 显示三次字符串
s:
push cx ;cx压栈
push ax ;ax压栈 每循环一次 显存位置就要移到下一行
mov si,0
mov di,0
mov es,ax
mov cx,16 ;循环16次 依次把字符串传到0b872:[di]里
s1:
mov al,[si]
mov es:[di],al
inc si
add di,2
loop s1
mov si,1 ;显存的奇地址是显示颜色的
mov al,[10h+bx] ;取色值 放入al中
mov cx,16
s2: ;依次将色值放入显存奇地址中
mov es:[si],al
add si,2
loop s2
pop ax
add ax,160 ;循环一次 移到下一行
add bx,1 ;取下一个色值
pop cx
loop s
mov ax,4c00h
int 21h
code ends
end start
我把答案编译后执行是显示三个字符串 而我的执行一次就显示一次字符串 不知道为什么。。大循环三次 明明是循环了呀 ~~~~~~~~ | | |
|
|
|
|
[第2楼]
[ 回复时间:2011-09-03 10:56 ]
[引用]
[回复]
[ top ] | |
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59 |
你把段地址加了160跑到屏幕外了,应该是add ax,0ah,加10就好 | | |
|
|
|
|
[第3楼]
[ 回复时间:2011-09-03 11:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-08-19 19:27 |
|
|