左岸阳光

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1 ;call 的时候ip入栈
  2 assume cs : codesg, ds : datasg, ss : stacksg
  3 
  4 datasg SEGMENT
  5      db '19751976197719781979','1980','1981','1982','1983','1984','1985','1986','1987','1988','1989','1990','1991','1992','1993','1994','1995'
  6      dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
  7      dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226,11542,14430,15257,17800
  8 datasg ENDS
  9 
 10 stacksg SEGMENT
 11     dw 16 dup (0)
 12 stacksg ENDS
 13 
 14 codesg SEGMENT
 15 
 16 changeToStr:    push si
 17         push cx
 18         mov bp, sp
 19     s0:    mov cx, 10
 20         call divdw
 21         add cl, '0'
 22         mov ch, 02h
 23         push cx
 24         cmp ax, 0
 25         jnz s0
 26 
 27     s1:    pop ax
 28         mov es : [si], ax
 29         add si, 2
 30         cmp sp, bp
 31         jnz s1
 32         pop cx
 33         pop si
 34         ret
 35 
 36 divdw:    push bp
 37     push ax
 38     mov ax, dx
 39     mov dx,0
 40     div cx
 41     mov bp, ax
 42     pop ax
 43     div cx
 44     mov cx, dx
 45     mov dx, bp
 46     pop bp
 47     ret
 48 
 49 start:    mov ax, datasg
 50     mov ds, ax
 51     mov ax, 0b800h
 52     mov es, ax
 53     mov ax, stacksg
 54     mov ss, ax
 55     mov sp, 32
 56 
 57     mov cx, 21
 58     mov si, 0
 59     mov bx, 0
 60     mov di, 0
 61 s:    mov al, [bx]
 62     mov es : [si], al
 63     mov byte ptr es : [si + 1], 02h
 64     mov al, [bx + 1]
 65     mov es : [si + 2], al
 66     mov byte ptr es : [si + 3], 02h
 67     mov al, [bx + 2]
 68     mov es : [si + 4], al
 69     mov byte ptr es : [si + 5], 02h
 70     mov al, [bx + 3]
 71     mov es : [si + 6], al
 72     mov byte ptr es : [si + 7], 02h
 73 
 74     mov ax, [bx + 84]
 75     mov dx, [bx + 86]
 76     add si, 20
 77     call changeToStr
 78     
 79     mov ax, [di + 168]
 80     mov dx, 0
 81     add si, 20
 82     call changeToStr
 83     
 84 
 85     mov dx, [bx + 86]
 86     mov ax, [bx + 84]
 87     push cx
 88     mov cx, [di + 168]
 89     add si, 20
 90     call divdw
 91     push ax
 92     mov ax, dx
 93     call changeToStr
 94     pop ax
 95     call changeToStr
 96     sub si, 60
 97     pop cx
 98 
 99 
100     add bx, 4
101     add di, 2
102     add si, 160
103     loop s
104 
105     mov ax, 4c00h
106     int 21h
107 
108 codesg ENDS
109 END start

在虚拟机中把int 21h 变成jmp $则显示上图,基本实现实验。刚刚发现不需要jmp $来死循环,想想也是,改变的是显存,程序结束没有别的因素改变显存,依旧显示。

posted on 2012-11-07 23:24  左岸阳光  阅读(637)  评论(1编辑  收藏  举报