汇编网首页登录博客注册
sissim的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
好友圈
友情链接

[2010-02-11 23:50] 实验11

程序如下:
        assume  cs:codesg
datasg  segment
        db      "Beginner's All-purpose Symbolic Instruction Code.",0
datasg  ends
codesg  segment
begin:  mov     ax,datasg
        mov     ds,ax
        mov     si,0
        call    letterc
        mov     ax,4c00h
        int     21h

letterc:
        push    si
        push    cx
        xor     cx,cx
n:      mov     cl,[si]
        jcxz    over
        cmp     cl,'a'
        jb      n1
        cmp     cl,'z'
        ja      n1
        and     [si],byte ptr 0dfh 
n1:     inc     si
        jmp     n
over:   pop     cx
        pop     si
        ret

codesg  ends
        end     begin

调试结果如下:
D:\masm>debug shy11.exe
-u0 2a
0B64:0000 B8600B        MOV     AX,0B60
0B64:0003 8ED8          MOV     DS,AX
0B64:0005 BE0000        MOV     SI,0000
0B64:0008 E80500        CALL    0010
0B64:000B B8004C        MOV     AX,4C00
0B64:000E CD21          INT     21
0B64:0010 56            PUSH    SI
0B64:0011 51            PUSH    CX
0B64:0012 33C9          XOR     CX,CX
0B64:0014 8A0C          MOV     CL,[SI]
0B64:0016 E310          JCXZ    0028
0B64:0018 80F961        CMP     CL,61
0B64:001B 7208          JB      0025
0B64:001D 80F97A        CMP     CL,7A
0B64:0020 7703          JA      0025
0B64:0022 8024DF        AND     BYTE PTR [SI],DF
0B64:0025 46            INC     SI
0B64:0026 EBEC          JMP     0014
0B64:0028 59            POP     CX
0B64:0029 5E            POP     SI
0B64:002A C3            RET
-g 5

AX=0B60  BX=0000  CX=006B  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B60  ES=0B50  SS=0B60  CS=0B64  IP=0005   NV UP EI PL NZ NA PO NC
0B64:0005 BE0000        MOV     SI,0000
-d ds:0 30
0B60:0000  42 65 67 69 6E 6E 65 72-27 73 20 41 6C 6C 2D 70   Beginner's All-p
0B60:0010  75 72 70 6F 73 65 20 53-79 6D 62 6F 6C 69 63 20   urpose Symbolic
0B60:0020  49 6E 73 74 72 75 63 74-69 6F 6E 20 43 6F 64 65   Instruction Code
0B60:0030  2E                                                .
-g b

AX=0B60  BX=0000  CX=006B  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B60  ES=0B50  SS=0B60  CS=0B64  IP=000B   NV UP EI PL NZ NA PO CY
0B64:000B B8004C        MOV     AX,4C00
-d ds:0 30
0B60:0000  42 45 47 49 4E 4E 45 52-27 53 20 41 4C 4C 2D 50   BEGINNER'S ALL-P
0B60:0010  55 52 50 4F 53 45 20 53-59 4D 42 4F 4C 49 43 20   URPOSE SYMBOLIC
0B60:0020  49 4E 53 54 52 55 43 54-49 4F 4E 20 43 4F 44 45   INSTRUCTION CODE
0B60:0030  2E                                                .
-q

加上显示字符串的子程序,就可以直接在dos下看到结果:
        assume  cs:codesg 
datasg  segment 
        db      "Beginner's All-purpose Symbolic Instruction Code.",0 
datasg  ends 
codesg  segment 
begin:  mov     ax,datasg 
        mov     ds,ax 
        mov     si,0 
        call    letterc 
        mov     dh,5
        mov     dl,1
        mov     cx,71h
        call    show_str
        mov     ax,4c00h 
        int     21h 

letterc: 
        push    si 
        push    cx 
        xor     cx,cx 
n:      mov     cl,[si] 
        jcxz    over 
        cmp     cl,'a' 
        jb      n1 
        cmp     cl,'z' 
        ja      n1 
        and     [si],byte ptr 0dfh  
n1:     inc     si 
        jmp     n 
over:   pop     cx 
        pop     si 
        ret

show_str: 
        push    ax 
        push    bx 
        push    cx 
        push    dx 
        push    si 
        push    es 
        dec     dh        ;行号减一 
        mov     al,0a0h 
        mul     dh        ;0a0h*(行号-1) 
        mov     dh,0 
        dec     dl 
        add     dx,dx      ;2*(列号-1) 
        add     ax,dx      ;0a0h*(行号-1)+2*(列号-1) 
        mov     bx,ax 
        mov     ch,0       ;ch清零,为cx进栈(颜色)做准备 
        mov     ax,0b800h 
        mov     es,ax     ;显存段地址 
s1:     push    cx         ;颜色进栈 
        mov     cl,[si]    ;取出一个字符 
        jcxz    ok         ;是零则返回 
        mov     es:[bx],cl ;不是零,放显存相应单元 
        inc     bx 
        pop     cx         ;取回颜色 
        mov     es:[bx],cl;存颜色 
        inc     bx 
        inc     si 
        jmp     short s1  ;修改指针并循环 
ok:     pop     cx     ;返回前,将刚才进栈的cx出栈,使栈顶指针指向返回地址 
        pop    es 
        pop    si 
        pop    dx 
        pop    cx 
        pop    bx 
        pop    ax 
        ret


codesg  ends
        end        begin
评论次数(0)  |  浏览次数(543)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码