Nisy 发表于 2010-12-20 18:41:46

关于 int 21h 的一些用法

int 21h 函数的使用

参考dos中断INT+21H大全 : http://wenku.baidu.com/view/9fd3b25c3b3567ec102d8a9c.html
or http://course.cug.edu.cn/21cn/%CE%A2%D0%CD%BC%C6%CB%E3%BB%FA%BC%BC%CA%F5/content/masm/chapter4/4-4/4-4-3.htm
or http://wenku.baidu.com/view/fed6e84ac850ad02de80417d.html
or http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=5618&kindId=6451&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 ,al
      inc bx
      inc cx
      cmp cx,10h
      jgeshow
      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

Finder 发表于 2010-12-20 18:50:30

FBI在此站位,学习中

whypro 发表于 2010-12-20 19:00:42

兔小样: 您的贴子很精彩,希望能再次分享!威望 + 10 飘云币 + 100 枚 好大方 {:3_159:}

Nisy 发表于 2010-12-20 19:12:31

assume cs:code
data segment
   Nisy   db 'Hello,Nisy!$'
   Komany db 'Hello,komany!$'
   Chinadb '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,
                and al,0dfh
                mov ,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

winmvp 发表于 2010-12-21 08:19:30

汇编已经跟不上大家的进度了,争取放假期间自己补上。
心里老是有种愧疚感,不知道是对老师还是对自己。

ngm20 发表于 2010-12-21 09:28:23

汇编已经跟不上大家的进度了,争取放假期间自己补上。
心里老是有种愧疚感,不知道是对老师还是对自己。
winmvp 发表于 2010-12-21 08:19 https://www.chinapyg.com/images/common/back.gif
自己多看看王爽的汇编,肯定能跟上的

努力ing 发表于 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 :
             movah,02h
             movdl,0dh
             int21h
             movdl,0ah
             int21h
             ret
      
_printf:   mov ax,0900h
            
             mov dx,si
             int 21h
             ret

_printf_big: push bp
             mov bp,sp
            
             mov si,
             push si
   s1:   cmp byte ptr ,0
             je   s
             cmp byte ptr ,21h
             jes2

             cmp byte ptr ,2ch
             je   s2

             and byte ptr ,0dfh
            
       s2:   inc si
             jmps1
       s:    mov byte ptr,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
             int21h
code ends
end start

Finder 发表于 2010-12-21 15:08:05

_printf_big: push bp
             mov bp,sp
            
             mov si,
搞不懂这样做有何意义,难道直接使用ax传参不方便吗?为什么绕这么大的圈子??

努力ing 发表于 2010-12-21 15:15:37

回复 8# Finder


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

Finder 发表于 2010-12-21 15:26:02

回复 9# 努力ing


    用一个ax作为参数传给子程序不是更具有通用行吗?
mov ax,4c00h
int 21h
难道它不通用吗?
页: [1] 2
查看完整版本: 关于 int 21h 的一些用法