|
主题 : : 用单循环编出的实验九 [待解决] |
回复[ 9次 ]
点击[ 528次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2008-12-14 16:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2008-09-09 21:27 |
assume cs:code,ds:data
data segment
db 'welcome to masm!'
data ends
code segment
start:mov ax,data
mov ds,ax
mov ax,0B872h;设置屏幕中间位置段地址
mov es,ax
mov bx,0
mov si,0
mov cx,16
s:mov al,[bx]
mov ah,02h
mov es:[si],ax ;三行中的第一行
mov ah,24h
mov es:[si+0a0h],ax ;三行中的第二行(同一列,相邻两行相差160个字符,段地址相差a0h)
mov ah,71h
mov es:[si+140h],ax ;三行中的第三行
inc bx
add si,2
loop s
mov ax,4c00h
int 21
code ends
end start
请大家评论一哈!!! | | |
|
|
|
|
[第1楼]
[ 回复时间:2008-12-14 20:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2008-09-09 21:27 |
不好意思程序返回处写掉了一个h。 int 21 应改为 int 21h!呵呵! | | |
|
|
|
|
[第2楼]
[ 回复时间:2008-12-14 20:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2008-09-09 21:27 |
正确的程序应该是:
assume cs:code,ds:data
data segment
db 'welcome to masm!'
data ends
code segment
start:mov ax,data
mov ds,ax
mov ax,0B872h;设置屏幕中间位置段地址
mov es,ax
mov bx,0
mov si,0
mov cx,16
s:mov al,[bx]
mov ah,02h
mov es:[si],ax ;三行中的第一行
mov ah,24h
mov es:[si+0a0h],ax ;三行中的第二行(同一列,相邻两行相差160个字符,段地址相差a0h)
mov ah,71h
mov es:[si+140h],ax ;三行中的第三行
inc bx
add si,2
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第3楼]
[ 回复时间:2008-12-14 20:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2008-09-09 21:27 |
程序思路主要是采用以列的方式去修改显存。因为同列的是相同的字母,AScii码相同,知识属性值不同而已。所以每次循环只需要,作一次取字符ascii码的操作(mov al,[bx]),然后对相应属性值设置后,就可以分别送入同列三行的地址中: 1行:mov ah,02h mov es:[si],as (ax 高8位存属性值,低8位存ascii码值)
2行:mov ah,24h mov es:[si+0a0h],ax
3行:mov ah,71h mov es:[si+140h],ax
这样16次循环后,就完成了任务。如过采用行的方式,修改完一行之后在去修改第二行,第三行。这样,就必须重复做取三次字符Ascii码的操作。这样就必须用双重循环嵌套的方式才能完成。
采用双重循环方式的代码:
assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!'
db 02h,24h,71h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:mov ax,data
mov ds,ax
mov di,0
mov ax,0b872h
mov cx,3
mov sp,30h
s:mov bx,0
mov si,0
mov es,ax
push ax
push cx
mov cx,16
mov ah,[di+10h]
s1:mov al,[bx]
mov es:[si],ax
inc bx
add si,2
loop s1
pop cx
pop ax
add ax,0ah
inc di
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第4楼]
[ 回复时间:2009-01-02 19:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
行模式,列模式
哪种简单用那种
多用用就能熟能生巧 | | |
|
|
|
|
[第5楼]
[ 回复时间:2009-11-15 16:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2009-03-20 23:24 |
|
|
|
|
|
[第6楼]
[ 回复时间:2009-11-23 17:27 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:16
注册日期:2009-10-21 20:01 |
我的:
assume cs:code,ds:data
data segment
db 'welcome to masm!'
data ends
code segment
start:mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov bp,0720h
mov bx,07c0h
mov di,0860h
mov si,0
mov cx,16
s:mov al,[si]
mov ah,02h
mov es:[bp],ax
mov ah,24h
mov es:[bx],ax
mov ah,0F1h
mov es:[di],ax
inc si
add bp,2
add bx,2
add di,2
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第7楼]
[ 回复时间:2009-11-24 21:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-09-08 19:29 |
写这个程序时一直想的是怎样用转移来做 思路很简单 这个是我的程序 就是长了点
assume cs:code ds:data ss,stack
data segment
db 'welcome to masm!'
data ends
stack segment
dw 0,0,0
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
push offset s3
push offset s2
push offset s1
mov ah,02h
mov di,0
s0:mov bx,0
mov cx,16
s:mov al,[bx]
mov es:[di],ax
inc bx
add di,2
loop s
pop si
jmp si
s1:mov ah,24h
mov di,0a0h
jmp s0
s2:mov ah,71h
mov di,140h
jmp s0
s3:mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第8楼]
[ 回复时间:2010-01-06 23:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-10-14 13:42 |
|
|
|
|
|
[第9楼]
[ 回复时间:2010-04-19 16:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2009-12-18 17:03 |
写这个程序时一直想的是怎样用转移来做 思路很简单 这个是我的程序 就是长了点
assume cs:code ds:data ss,stack
data segment
db 'welcome to masm!'
data ends
stack segment
dw 0,0,0
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
push offset s3
push offset s2
push offset s1
mov ah,02h
mov di,0
s0:mov bx,0
mov cx,16
s:mov al,[bx]
mov es:[di],ax
inc bx
add di,2
loop s
pop si
jmp si
s1:mov ah,24h
mov di,0a0h
jmp s0
s2:mov ah,71h
mov di,140h
jmp s0
s3:mov ax,4c00h
int 21h
code ends
end start
------------------
回复:不明白你的SI是从哪来的。。。。。 | | |
|