首页 > 其他 > 详细

第十一天、进展不顺

时间:2015-11-10 21:15:37      阅读:203      评论:0      收藏:0      [点我收藏+]

    这两天进展不顺,被卡住了!等搞清楚再继续,就把调试的时候写的两个函数贴上来凑数吧。——win7下貌似没有debug,有也不爱用,业余屌丝还是比较中意在代码执行的时候直接输出中间值来查错。

    第一个函数是提示字符串的:

; ----------------------------------------------------------------------------------------
; 功能:显示紧跟在调用指令后定义的字符串
; 参数:ds : si = 字符串地址
; 反值:无
PrintMessage:
    ; 初始化中断参数
    mov ah, 0x0e                            ; 功能号:0x0E 显示字符,光标跟随字符移动
    xor bx, bx                              ; bh = 页码,bl = 前景色(图形模式)

.Loop:
    ; 逐个取字符
    pop si
    lodsb
    cmp al, 0                               ; 字符串以 0 结尾
    je .Return
    push si

    int 0x10
    jmp .Loop

.Return:
    ret

    这个很好用,不用预先定义字符串,要用的时候直接在 call 下一行定义字符串就行:

    call PrintMessage
    db "Message 1 !", `\r\n`, 0


    第二个是显示数字的——把数字当字符串显示:

; 功能:将 32 位整数以字符形式显示到屏幕
; 参数: eax = 数据
; 返回:无
PrintNum:
    mov ecx, 0
    push ecx

; 求余,把对应的数字转换成ASCII码,再压入栈
    mov ecx, 10
.rem:
    xor edx, edx
    div ecx
    add edx, 0x30                            ;  余数转成 ASCII 码
    push edx
    cmp eax, 0
    jnz .rem

    mov ah, 0x0e                            ; 功能号:0x0E 显示字符,光标跟随字符移动
    xor bx, bx
.print:
    pop ecx
    jcxz .return
    inc edi
    mov al, cl
    int 0x10
    jmp .print

.return:
	ret

    有了这个不用在 debug 里找变量中间值了!




第十一天、进展不顺

原文:http://my.oschina.net/u/580100/blog/528663

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!