飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5513|回复: 13

[C/C++] 关于 int 21h 的一些用法

    [复制链接]

该用户从未签到

发表于 2010-12-20 18:41:46 | 显示全部楼层 |阅读模式
int 21h 函数的使用

参考dos中断INT+21H大全 : http://wenku.baidu.com/view/9fd3b25c3b3567ec102d8a9c.html
or http://course.cug.edu.cn/21cn/%C ... pter4/4-4/4-4-3.htm
or http://wenku.baidu.com/view/fed6e84ac850ad02de80417d.html
or http://www.asmedu.net/blog/user/ ... 51&postId=10255

或者百度下 int 21h 的使用

------------------------

assume cs:code

data segment
db 0dh,0ah
db 10h dup(20h)
db 24h

data ends

code segment

start:  mov ax,data
        mov ds,ax

        xor cx,cx
        mov bx,2
getchar:mov ax,100h
        int 21h
        mov [bx],al
        inc bx
        inc cx
        cmp cx,10h
        jge  show
        cmp al,24h
        jnz getchar

show:   xor dx,dx
        mov ax,900h
        int 21h

        mov ax,4c00h
        int 21h

code ends
end start

---------------------------------

C:\masm5>tt
1111111111111111
1111111111111111
C:\masm5>tt
Hello,Nisy$
Hello,Nisy

评分

参与人数 1威望 +40 飘云币 +400 收起 理由
兔小样 + 40 + 400 您的贴子很精彩,希望能再次分享!

查看全部评分

PYG19周年生日快乐!

该用户从未签到

发表于 2010-12-20 18:50:30 | 显示全部楼层
FBI在此站位,学习中
PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-12-20 19:00:42 | 显示全部楼层
    兔小样: 您的贴子很精彩,希望能再次分享!威望 + 10 飘云币 + 100 枚 好大方
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2010-12-20 19:12:31 | 显示全部楼层
    assume cs:code
    data segment
       Nisy   db 'Hello,Nisy!$'
       Komany db 'Hello,komany!$'
       China  db 'Hello,China!$'
       ASM    db 'Hello,ASM!$'
    data ends

    code segment
                start:
                      mov ax,data
                      mov ds,ax
                      call fun_1
                      mov ax,4c00h  
                      int 21h
            fun_1:  push cx
                    push si
                    push dx

                    mov cx,11
                    mov si,0
                 s:
                    mov bx,offset Nisy
                    mov al,[bx+si]
                    and al,0dfh
                    mov [bx+si],al
                    inc si
                    loop s

                    mov ax,0900h
                    mov dx,offset Nisy
                    int 21h

                    pop dx
                    pop si
                    pop cx
                    retn           
                         
            
    code ends
    end start
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-12-21 08:19:30 | 显示全部楼层
    汇编已经跟不上大家的进度了,争取放假期间自己补上。
    心里老是有种愧疚感,不知道是对老师还是对自己。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-12-21 09:28:23 | 显示全部楼层
    汇编已经跟不上大家的进度了,争取放假期间自己补上。
    心里老是有种愧疚感,不知道是对老师还是对自己。
    winmvp 发表于 2010-12-21 08:19

    自己多看看王爽的汇编,肯定能跟上的
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-12-21 14:55:06 | 显示全部楼层
    assume cs:code ,ds:data,ss:stack

    data segment

    a db 'Hello,Nisy!',0
    b db 'Hello,Your Name!',0
    c db 'Hello,China!',0
    d db 'Hello,ASM!',0
    data ends

    stack segment

    dw 30h dup(0)

    stack ends


    code segment
    _enter :
                 mov  ah,02h
                 mov  dl,0dh
                 int  21h
                 mov  dl,0ah
                 int  21h
                 ret
            
    _printf:     mov ax,0900h
                
                 mov dx,si
                 int 21h
                 ret

    _printf_big: push bp
                 mov bp,sp
                
                 mov si,[bp+4]
                 push si
         s1:     cmp byte ptr [si],0
                 je   s
                 cmp byte ptr [si],21h
                 je  s2

                 cmp byte ptr [si],2ch
                 je   s2

                 and byte ptr [si],0dfh
                
           s2:   inc si
                 jmp  s1
           s:    mov byte ptr[si],24h

                 pop si

                 call _printf

                 pop bp
                 ret
                

    start:       mov ax,data
                 mov ds,ax

                 mov ax,stack
                 mov ss,ax
                 mov sp,30h

                 mov ax,offset a
                 push ax
                 call _printf_big
                 pop ax
                 call _enter

                 mov ax,offset b
                 push ax
                 call _printf_big
                 pop ax
                 call _enter

                 mov ax,offset c
                 push ax
                 call _printf_big
                 pop ax
                 call _enter

                 mov ax,offset d
                 push ax
                 call _printf_big
                 pop ax
                 call _enter


                 mov ax,4c00h
                 int  21h
    code ends
    end start
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-12-21 15:08:05 | 显示全部楼层
    _printf_big: push bp
                 mov bp,sp
                
                 mov si,[bp+4]
    搞不懂这样做有何意义,难道直接使用ax传参不方便吗?为什么绕这么大的圈子??
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-12-21 15:15:37 | 显示全部楼层
    回复 8# Finder


        为了函数能重用!所以都加上的!
        或是下次这个是给其它函数调的时候准备的!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-12-21 15:26:02 | 显示全部楼层
    回复 9# 努力ing


        用一个ax作为参数传给子程序不是更具有通用行吗?
    mov ax,4c00h
    int 21h
    难道它不通用吗?
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表