精英盒子 -> 程序设计 -> 8086汇编函数:show_str [打印本页]

outman 2011-08-04 16:25

8086汇编函数:show_str

其实是做的书上一道题……-、-但JY死活要我发代码上来 难道他是想靠明星效应增加论坛人气么
OK 上代码
  1. ;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完这个函数后会变的,没有自动恢复
凑字数,发上使用方法
  1. 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



jybox 2011-08-04 16:31
前排围观
好吧,虽然我看不懂汇编

outman 2011-08-04 16:33

abreto 2011-08-04 18:56
你不是写过几个汇编程序么,还给我发了一大坨汇编工具

jybox 2011-08-04 19:30
忘光了.......而且...说是写的,也就是抄的嘛,你懂的




Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.042962 second(s),query:5 Gzip enabled