实验10——1的问题
assume cs:code,ds:datadata segment
db 'weclcome to masm!',0
data ends
code segment
start:
mov dh,8
mov dl,8
mov cl,2
mov ax,data
mov ds,ax ;字符的段地址
sub si,si
call show_str
mov ax,4c00h
int 21h
show_str:
dec dh
;地址是以0开始的,所以全部先减1
mov al,0a0h ;行的基本单位
mul dh ;得出等几行的开始地址,存在ax中
mov bx,ax
mov ax,0b800h
mov es,ax ;加上其基地址,组成段地址,存放在es中
mov al,2
mul dl
sub ax,2
mov di,ax ;算出偏移地址,存放在di中
mov al,cl
mov ch,0
change: ;虚拟一个循环
mov cl,ds:
jcxz a ;当cx等于0的时候程序跳到c处
mov es:,cl ;复制字
mov es:,al;得复制颜色属性
inc si
add di,2
jmp short change
a:
ret
code ends
end start
我觉得这个实验把上面红色的地方改成add ax,0b800h 再把下面绿色的地方改成mov es:,cl mov es:,al 那样也能实现实验10——1的子程序的啊,为什么只改成那样就不可以了啊。求名位的详解啊。谢谢
那位大哥来看看嘛,真的是写不出来了{:5_100:} 大哥,大姐们{:5_100:} 题目没问清楚,看不太懂
Seandor 发表于 2012-8-31 23:38 static/image/common/back.gif
题目没问清楚,看不太懂
我最开始自己写代码的时候,只有那上面带颜色的地方和答案不一样。但是我觉得我写的也没错的啊,怎么会弄不出来,那就是有错,但是我自己不知道那出错了。谢谢你{:5_100:} 本帖最后由 Seandor 于 2012-9-1 11:41 编辑
C开头 发表于 2012-9-1 09:43 static/image/common/back.gif
我最开始自己写代码的时候,只有那上面带颜色的地方和答案不一样。但是我觉得我写的也没错的啊,怎么会弄 ...
这样写就木有问题show_str:push ax 本帖最后由 Seandor 于 2012-9-1 11:45 编辑
还是直接复制吧
show_str:push ax
push es
push cx
mov ax, 0ah ;地址是以0开始的,但可以有第0行啊
mul dh ;所以不用减1,行号的取值范围是0-24,见p259
add ax, 0b800h
mov es, ax ;保存段地址到es中
mov bl, dl
add bl, bl ;求得偏移地址
xor bh, bh ;用bx存放偏移地址
mov ah, cl ;存放颜色属性
s: mov cl, ds:
mov ch, 0
jcxz ok
mov al, ds:
mov es:, al
mov es:.1, ah
add bx, 2
inc si
jmp short s
ok:pop cx
pop es
pop ax
ret Seandor 发表于 2012-9-1 11:43 static/image/common/back.gif
还是直接复制吧
show_str:push ax
push es
呵呵,那我试试,谢谢了
页:
[1]