x86汇编--(八)指定位置打印字符串(七改)

来源:互联网 发布:淘宝同款图片怎么处理 编辑:程序博客网 时间:2024/05/22 15:03
;之前那个题目看错了,原来时要在8行3列这个地方打印字符串;0 0写了几个小时的成果- - (╯-_-)╯╧╧ 晕死assume cs:codesg,ds:datasg,ss:stackdatasg segmentdb 'Welcome to masm! ',0datasg endsstack segmentdw 64 dup(0)stack endscodesg segmentstart:mov dh,8;行号mov dl,3;列数mov cl,2;绿色mov ax,datasgmov ds,axmov si,0;ds:si指向字符串的首地址mov ax,stackmov ss,axmov sp,128call show_strmov ax,4c00hint 21h;打印dh行dl列的字符串show_str:push cxpush simov ax,0b800hmov es,ax;es定位显存基地址mov ax,0mov al,160dec dh;行号在显存下从0开始,所以减一mul dh;mov bx,ax;把放在ax中的乘积放到bx中mov al,2;每个字符占2个字节mul dl;定位列sub ax,2;每个字符占2个字节add bx,axmov ah,cl;低位存放颜色,因为cl下面要用来临时存放要处理的字符mov di,0;es:[bx+di]指向要写入的显存的地址call printpop sipop cxret;返回;打印字符串print:mov cl,[si]mov ch,0jcxz ok;判断当前字符是否到0,到了就停止这个打印mov al,[si]mov es:[bx+di],ax;写入显存显示inc siadd di,2jmp short print;如果没打印完,就继续往后打印ok:retcodesg endsend start

0 1
原创粉丝点击