《自己动手写操作系统》pmtest2笔记

;DispReturn模拟一个回车的显示,(让下一个要显示的字符在下一行的开头处显示),其中edi始终指向要显示的下一个字符的位置。
;   ------------------------------------------------------------------------
DispReturn:
push eax
push ebx
mov eax, edi ;
mov bl, 160  ;
div bl         ; eax/bl 执行后al=当前行号 
and eax, 0FFh; 只保留行号,列号清0
inc eax         ; eax+=1,使eax为当前行的下一行
mov bl, 160  ;
mul bl          ; eax*bl,eax为当前行的下一行的开始
mov edi, eax ; 使edi指向当前行的下一行的开始
pop ebx
pop eax    

ret
;   DispReturn   结束---------------------------------------------------------

 

注1: 80*25彩色字模式的显示显存在内存中的地址为B8000h~BFFFH,共32k.向这个地址写入的内容立即显示在屏幕上边.在80*25彩色字模式 下共可以显示25行,每行80字符,每个字符在显存中占两个字节,第一个字节是字符的ASCII码.第二字节是字符的属性,(80字符占160个字节)。

2. test 把两个操作数进行"与"操作,不保存运算结果,只设置标志位, 一般用来测试寄存器是否为空
text eax,eax  //来检测eax是否为空
jnz xxxxx       //不为空就跳

 

.1:
    lodsb                ;load a byte from ds:si to al --- I
    test    al, al            ;if al =0 then zf changed ,the string is end with 0 意思是循环加载PMMessage直到最后一个字符
    jz    .2             ;当字符加载完毕,就执行.2
    mov    [gs:edi], ax       
    add    edi, 2
    jmp    .1
.2:    ; 显示完毕

AL和AL相与可以测试AL是否是0,因为他改变了ZF

 

 

转载于:https://www.cnblogs.com/pavkoo/p/3522702.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值