汇编语言子函数——显示字符串

来源:互联网 发布:多人通话软件 编辑:程序博客网 时间:2024/06/05 15:17

在汇编语言中,字符串的显示是很重要的,也是经常要被调用的,所以最好写一个通用的显示子函数,下面我提供一个自己写的显示的子函数

assume cs:code, ds:datadata segmentdb 'ok!', 0data endscode segmentstart:mov dh, 8                    ;行数mov dl, 3                    ;列数mov cl, 2                    ;颜色mov ax, datamov ds, axcall show_str                ;跳转到子函数mov ax, 4C00Hint 21Hshow_str:push axpush cxpush sipush bxpush espush dx                       ;用栈将行数和列数保存起来mov bp, sp                    ;将栈指针给bp,在没有说明bp作为内存什么段地址的偏移地址时,默认是在栈段中mov al, [bp + 1]              ;[bp+1]是行数mov ah, 0mov bx, 160                   ;这里的160是每一行的最大字节数mul bxmov si, ax                    ;做了16位乘法算法后,dx的值已经被改变                              ;si中存放显示区域的每行的首偏移地址mov al, [bp]                  ;因为每个字符是用由两个字节组成的,所以这里计算列数mov bl, 2mul blmov bx, ax                    ;bx中存放每个字符的第一个字节的地址pop dx                        ;将上次入栈的dx出栈mov dl, cl                    ;将颜色信息给dlmov ax, 0B800H                ;将段地址指向显示区域的段地址mov es, axmov di, 0s:mov cl, ds:[di]mov ch, 0jcxz ok                       ;直到遍历到0,停止mov es:[si + bx], cl          ;将数据段中的数据取一个一个取出来放到显示区域mov es:[si + bx + 1], dl      ;将 颜色信息给字符的后面一个字符,表示颜色add bx, 2add di, 1jmp sok:pop espop bxpop sipop cxpop axretcode endsend start

上面的重要的语句都标了注释,方便大家看懂

下面是运行结果:


0 0
原创粉丝点击