| outman |
2011-08-04 16:25 |
8086汇编函数:show_str
其实是做的书上一道题……-、-但JY死活要我发代码上来 难道他是想靠明星效应增加论坛人气么 OK 上代码
- ;show_str 传递:dh行数 dl列数 ds:si指向字符串首地址,字符串以0结尾 cl=颜色
show_str: ;检测行数是否为0 是的直接跳过去列数 mov bx,0 mov di,cx mov cx,0 mov cl,dh jcxz show_str_l ;计算行数 mov ax,0 mov al,160 dec dh mul dh add ax,160 mov bx,ax
;计算列数 show_str_l: mov ax,0 mov ch,0 mov cl,dl jcxz ok_show_str mov al,dl mov dx,2 div dl mov ch,0 mov cl,ah inc ax jcxz ok_show_str inc ax ok_show_str: mov cx,di mov ah,0 add bx,ax
;开始输出 mov ax,0b800h mov es,ax mov ah,cl ;获取字符串并显示 mov cx,2 show_str_loop: mov ch,0 mov byte ptr cl,ds:[si] jcxz show_str_ret mov al,cl mov es:[bx],ax inc si add bx,2 mov cx,2 loop show_str_loop
show_str_ret: ret
传递的参数如注释,但我说过,由于是练习题,所以嘛,原来传进去的寄存器值call完这个函数后会变的,没有自动恢复 凑字数,发上使用方法
- assume cs:code,ds:data
data segment db 'hello world!',0 data ends
code segment start: mov ax,data mov ds,ax mov si,0 mov dh,0 mov dl,0 mov cl,123 call show_str ;以下这段代码是为了查看输出结果,按任意键退出 mov ah,7 int 21h ;以上这段代码是为了查看输出结果,按任意键退出 mov ax,4c00h int 21h
show_str: ...;复制之
code ends end start
|
|