前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >汇编语言关于2号功能函数的坑点

汇编语言关于2号功能函数的坑点

作者头像
KevinBruce
发布2020-03-12 16:07:07
5250
发布2020-03-12 16:07:07
举报
文章被收录于专栏:CTF及算法学习CTF及算法学习

汇编语言的2号功能函数有小小的坑点,需要格外注意一下。

代码语言:javascript
复制
mov ah,2
int 21h

某些dos版本下,该功能函数会返回一个值并存在al中。

如果不注意这一点,有时候就会出错。比如如下代码:

代码语言:javascript
复制
DATAS SEGMENT
    ;此处输入数据段代码  
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    mov ax,3633H
    call print
    MOV AH,4CH
    INT 21H
print proc
    push dx
    mov dl,ah
    ;入口参数是ax
    mov ah,2
    int 21h
    mov dl,al
    mov ah,2
    int 21h
    pop dx
    ret
print endp
CODES ENDS
    END START

理想的输出结果应该是63,而实际输出为66。

以下是debug过程的部分截图,可以验证该说法。

也可以参考如下文章: http://www.delorie.com/djgpp/doc/rbinter/id/65/25.html

文章内容

代码语言:javascript
复制
Category: DOS kernel
INT 21 - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT

    AH = 02h
    DL = character to write
    (某些版本存在返回值)
Return: AL = last character output (despite the official docs which state
        nothing is returned) (at least DOS 2.1-7.0)
Notes:  ^C/^Break are checked, and INT 23 executed if pressed
    standard output is always the screen under DOS 1.x, but may be
      redirected under DOS 2+
    the last character output will be the character in DL unless DL=09h
      on entry, in which case AL=20h as tabs are expanded to blanks
    if standard output is redirected to a file, no error checks (write-
      protected, full media, etc.) are performed
SeeAlso: AH=06h,AH=09h
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档