|
主题 : : 实验show_str,寄存器用的有点乱 [已解决] |
回复[ 2次 ]
点击[ 675次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-01-24 17:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:6
注册日期:2010-01-07 10:37 |
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start:mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ah,01h ;暂停用
int 21h
mov ax,4c00h
int 21h
show_str:mov ax,0B800H
mov es,ax
dec dh
mov al,0a0h
mul dh
dec dl
add dl,dl
mov dh,0
add ax,dx
mov bx,ax
mov ah,cl
s:mov cl,ds:[si]
mov ch,0
jcxz ok
mov ch,ah
mov es:[bx],cx
add bx,2
inc si
jmp short s
ok:ret
code ends
end start
希望大家多提建议,把你们也拿出来吧,大家一块学习~~~~~~ | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-01-24 22:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51 |
[2010-01-24 11:55] 作业:实验10.1
==================================================
root@yeah /cygdrive/d/asm
$ cat lab101.asm
assume cs:code
data segment
db 'welcome to masm!',0
data ends
code segment
;子程序描述
;名称:show
;功能:在指定位置用指定颜色显示一个用0结束的字符串
;参数:dh=行号(0~24),dl=列号(0~79),cl=颜色
;ds:si指向字符串首地址
;返回:无
show:
mov bx,0b800h ;指定显示缓存区
mov es,bx ;地址
mov ax,0a0h ;将传入参数dh
mul dh ;计算为目标首
mov bp,ax ;地址,ES:BP
mov ah,cl ;颜色值
;开始循环处理字符串并显示到指定位置
a: mov bl,dl ;将传入参数dl
mov bh,0 ;作为目标地址
mov di,bx ;变量
mov cl,[si] ;检查[si]是否为
mov ch,0 ;0,如是,则跳出
jcxz ok ;循环
mov al,[si] ;装入字符串
mov es:1[bp+di],ax ;传送至目标地址
inc si ;增量操作
add dl,2 ;
loop a
ok: ret ;ip出栈返回调用
start: mov ax,data ;定义数据段地址
mov ds,ax ;字符串首地址
mov si,0 ;ds:si
mov dh,8 ;行
mov dl,3 ;列
mov cl,2 ;颜色
call show ;调用子程序
mov ah,4ch ;程序返回
int 21h
code ends
end start
================================================== | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-02-17 19:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:6
注册日期:2010-01-07 10:37 |
此贴由 贴主 于 [ 2010-02-17 19:34 ] 结贴。 结贴原因:问题已解决 | | |
|