X86汇编程序设计

X86汇编程序设计第一次作业

第一二三题

代码部分

STACK1      SEGMENT PARA STACK
STACK_AREA  DW      100H DUP(?)
STACK_BTM   EQU     $ - STACK_AREA
STACK1      ENDS

DATA1       SEGMENT
TABLE_LEN   DW      16
TABLE       DW      200, 300, 400, 10, 20, 0, 1, 8
            DW      41H, 40, 42H, 50, 60, 0FFFFH, 2, 3
DATA1       ENDS

CODE1       SEGMENT
            ASSUME  CS:CODE1, DS:DATA1, SS:STACK1

MAIN        PROC        FAR;第一题:排序(降序)
            MOV     AX, STACK1
            MOV     SS, AX
            MOV     SP, STACK_BTM
            MOV     AX, DATA1
            MOV     DS, AX

LP1:        MOV     BX, 1
            MOV     CX, TABLE_LEN
            DEC     CX
            MOV     SI, OFFSET TABLE
LP2:        MOV     AX, [SI]
            CMP     AX, [SI+2]
            JAE     CONTINUE
            XCHG        AX, [SI+2]
            MOV     [SI], AX
            MOV     BX, 0
CONTINUE:   ADD     SI, 2
            LOOP        LP2
            CMP     BX, 1
            JZ      TURN_DEC;切换打印十进制和十六进制
            JMP     SHORT LP1
BACK:       JMP     EXIT

TURN_DEC:   MOV     CX, TABLE_LEN;第二题:打印排序后的结果(十进制)
            MOV     BX, 0
LP3:        MOV     SI, OFFSET TABLE
            ADD     SI, BX
            MOV     AX, [SI]
            MOV     SI, 0
            MOV     DI, 000AH

LP4:        MOV     DX, 0
            DIV     DI
            ADD     DX, 30H
            PUSH        DX
            INC     SI
            CMP     AX, 0
            JNZ     LP4

LP5:        POP     DX
            MOV     AH, 2
            INT     21H
            DEC     SI
            CMP     SI, 0
            JNZ     LP5

            MOV     DL, 32
            MOV     AH, 2
            INT     21H
            ADD     BX, 2
            LOOP        LP3
            JMP     BACK

TURN_HEX:   MOV     CX, TABLE_LEN;第三题:打印排序后的结果(十六进制)
            MOV     BX, 0
LP6:        MOV     SI, OFFSET TABLE
            ADD     SI, BX
            MOV     AX, [SI]
            MOV     SI, 0
            MOV     DI, 0010H

LP7:        MOV     DX, 0
            DIV     DI
            CMP     DX, 10
            JAE     BRANCH1
            ADD     DX, 30H
            JMP     BRANCH2
BRANCH1:    ADD     DX, 57H 
BRANCH2:    PUSH        DX
            INC     SI
            CMP     AX, 0
            JNZ     LP7

LP8:        POP     DX
            MOV     AH, 2
            INT     21H
            DEC     SI
            CMP     SI, 0
            JNZ     LP8

            MOV     DL, 32
            MOV     AH, 2
            INT     21H
            ADD     BX, 2
            LOOP        LP6
            JMP     BACK

EXIT:       MOV     AX, 4C00H
            INT     21H
MAIN        ENDP
CODE1       ENDS
            END     MAIN

运行截图
这里写图片描述
这里写图片描述
这里写图片描述

第四题

代码部分:

data segment
            a dd 0ffffffffh;第一个32位数
            b dd 0ffffffffh;第二个32位数
            result dw 0, 0, 0, 0;存放结果
data ends

code segment
            assume cs:code, ds:data
start:
            mov ax, data
            mov ds, ax

            mov bx, word ptr b
            mov ax, word ptr a
            mul bx
            mov result, ax
            mov result+2, dx

            mov bx, word ptr b
            mov ax, word ptr [a+2]
            mul bx
            add result+2, ax
            adc result+4, dx
            adc result+6, 0

            mov bx, word ptr [b+2]
            mov ax, word ptr a
            mul bx
            add result+2, ax
            adc result+4, dx
            adc result+6, 0

            mov bx, word ptr [b+2]
            mov ax, word ptr [a+2]
            mul bx
            add result+4, ax
            adc result+6, dx

exit: 
            mov ax, 4c00h
            int 21h
code ends
            end start

X86汇编程序设计第二次作业

第一题

STACK1      SEGMENT PARA STACK
STACK_AREA  DW      100H DUP(?)
STACK_BTM   EQU     $ - STACK_AREA
STACK1      ENDS

DATA1       SEGMENT
STRING1     DB 'It is a temp string.',0AH,0DH,'$'
STRING2     DB 50 DUP(?)
LEN         DW 23
MSG1        DB 0AH,0DH,'OLD_STRING:','$'
MSG2        DB 0AH,0DH,'CPY_STRING:','$'
DATA1       ENDS

CODE1       SEGMENT
            ASSUME  CS:CODE1, DS:DATA1, SS:STACK1

MAIN        PROC    FAR
            MOV     AX, DATA1 
            MOV     DS,AX
            LEA     SI, STRING1 
            MOV     AX, SEG STRING2
            MOV     ES, AX
            LEA     DI, STRING2
            MOV     CX, LEN
LABEL1: 
            MOVSB
            LOOP    LABEL1

            LEA     DX, MSG1
            MOV     AX, 0900H
            INT     21H   

            LEA     DX, STRING1   
            MOV     AX, 0900H   
            INT     21H  

            LEA     DX, MSG2   
            MOV     AX, 0900H   
            INT     21H   

            LEA     DX, STRING2   
            MOV     AX, 0900H   
            INT     21H   

            MOV     AX, 4C00H   
            INT     21H 
MAIN        ENDP
CODE1       ENDS
            END     MAIN

第二题

STACK1      SEGMENT     PARA STACK
STACK_AREA  DW          100H DUP(?)
STACK_BTM   EQU         $ - STACK_AREA
STACK1      ENDS

DATA1       SEGMENT
STRING1     DB          'Qinhaotong'
STRING2     DB          ' 15061166 '
LEN         DW          STRING2 - STRING1
TEST_STR        DB      'It is a temp string wittern by Qinhaotong.',0DH,0AH,'$'
TEST_STR_LEN    EQU     $ - TEST_STR
TEST_STR_END    DW      $

DATA1       ENDS

CODE1       SEGMENT
            ASSUME  CS:CODE1, DS:DATA1, SS:STACK1

FUNC1       PROC
            PUSH    DI
            MOV     DI,OFFSET TEST_STR
            PUSH    BX
            PUSH    AX
            MOV     BX,OFFSET TEST_STR_END
            PUSH    SI
LABEL1:     
            CMP     DI,BX
            JZ      LABEL5
            MOV     SI,OFFSET STRING1
            MOV     CX,LEN
            PUSH    DI
LABEL2:     
            MOV     AL,BYTE PTR [SI]
            CMP     BYTE PTR [DI],AL
            JNZ     LABEL3
            INC     SI
            INC     DI
            LOOP    LABEL2
            MOV     SI,OFFSET STRING2
            POP     DI
            CALL    FUNC2
            JMP     LABEL4
LABEL3:     
            POP     DI
LABEL4:     
            INC     DI
            JMP     LABEL1
LABEL5:     
            POP     SI
            POP     AX
            POP     BX
            POP     DI
            RET
FUNC1       ENDP            

FUNC2       PROC
            PUSH    CX
            MOV     CX,LEN
            CLD
            REP     MOVSB
            POP     CX
            RET
FUNC2       ENDP            

MAIN        PROC    FAR
            MOV     AX,STACK1
            MOV     SS,AX
            MOV     SP,STACK_BTM
            MOV     AX,DATA1
            MOV     DS,AX
            MOV     ES,AX
            MOV     DX,OFFSET TEST_STR
            MOV     AH,9
            INT     21H
            CALL    FUNC1
            MOV     DX,OFFSET TEST_STR
            MOV     AH,9
            INT     21H

EXIT:       MOV     AX,4C00H
            INT     21H
MAIN        ENDP

CODE1       ENDS
            END     MAIN

第三题

STACK1          SEGMENT     PARA STACK
STACK_AREA      DW          100H DUP(?)
STACK_BTM       EQU         $ - STACK_AREA
STACK1          ENDS

DATA1           SEGMENT
MSG1            DB          'OLD_STRING  :','$'
MSG2            DB          'CPY_STRING  :','$'
MSG3            DB          'UPPER_STRING:','$'
MSG4            DB          'LOWER_STRING:','$'
TEST_STR        DB          'It Is A tEmP sTrInG WiTtErN bY QiNhAoToNg.',0AH,0DH,'$'
TEST_CPY        DB          50 DUP(?)
TEST_STR_LEN    EQU         $ - TEST_STR
TEST_STR_END    DW          $


DATA1           ENDS

CODE1           SEGMENT
                ASSUME      CS:CODE1, DS:DATA1, SS:STACK1

MAIN            PROC        FAR
                MOV         AX, DATA1 
                MOV         DS,AX
                LEA         DX, OFFSET MSG1
                MOV         AX, 0900H
                INT         21H
                LEA         DX, OFFSET TEST_STR;杈撳嚭鍘熷瓧绗︿覆
                MOV         AX, 0900H
                INT         21H

                LEA         SI, TEST_STR
                MOV         AX, SEG TEST_CPY
                MOV         ES, AX
                LEA         DI, TEST_CPY
                MOV         CX, TEST_STR_LEN
LABEL1:  
                MOVSB 
                LOOP        LABEL1
                LEA         DX, OFFSET MSG2
                MOV         AX, 0900H
                INT         21H
                LEA         DX, TEST_CPY;杈撳嚭澶嶅埗鐨勫瓧绗︿覆
                MOV         AX, 0900H   
                INT         21H

                PUSH        ES
                PUSH        DS
                POP         ES
                MOV         SI, OFFSET TEST_STR
                MOV         DI, SI
                MOV         CX, TEST_STR_LEN
LP1:            LODSB
                CMP         AL, 'a'
                JB          CONTINUE1
                CMP         AL, 'z'
                JA          CONTINUE1
                SUB         AL, 20H
CONTINUE1:      STOSB
                LOOP        LP1
                POP         ES

                LEA         DX, OFFSET MSG3
                MOV         AX, 0900H
                INT         21H
                LEA         DX, TEST_STR;杈撳嚭澶у啓瀛楃涓?
                MOV         AX, 0900H
                INT         21H

                PUSH        ES
                PUSH        DS
                POP         ES
                MOV         SI, OFFSET TEST_STR
                MOV         DI, SI
                MOV         CX, TEST_STR_LEN
LP2:            LODSB
                CMP         AL, 'A'
                JB          CONTINUE2
                CMP         AL, 'Z'
                JA          CONTINUE2
                ADD         AL, 20H
CONTINUE2:      STOSB
                LOOP        LP2
                POP         ES

                LEA         DX, OFFSET MSG4
                MOV         AX, 0900H
                INT         21H
                LEA         DX, TEST_STR;杈撳嚭灏忓啓瀛楃涓?
                MOV         AX, 0900H
                INT         21H

                MOV         AX, 4C00H   
                INT         21H 
MAIN            ENDP
CODE1           ENDS
                END         MAIN

第四题

STACK1      SEGMENT PARA STACK
STACK_AREA  DW      100H DUP(?)
STACK_BTM   EQU     $ - STACK_AREA
STACK1      ENDS

DATA1       SEGMENT
STRING1     DB 'ABOVE',0AH,0DH,'$'
STRING2     DB 'ABOUT',0AH,0DH,'$'
STRING3     DB 'AGAIN',0AH,0DH,'$'
MSG1        DB 0AH,0DH,'BEFORE_SORT:',0AH,0DH,'$'
MSG2        DB 0AH,0DH,'AFTER_SORT:',0AH,0DH,'$'
STRING4     DB 50 DUP(?)
LEN         DW 5
DATA1       ENDS

CODE1       SEGMENT
            ASSUME  CS:CODE1, DS:DATA1, SS:STACK1

MAIN        PROC    FAR
            MOV     AX, DATA1 
            MOV     DS,AX
            LEA     DX, MSG1  
            MOV     AX, 0900H   
            INT     21H
            LEA     DX, STRING1   
            MOV     AX, 0900H   
            INT     21H
            LEA     DX, STRING2  
            MOV     AX, 0900H   
            INT     21H
            LEA     DX, STRING3
            MOV     AX, 0900H   
            INT     21H
            MOV     BP, 3
START:      PUSH    ES
            PUSH    DS
            POP     ES
            MOV     SI, OFFSET STRING1
            MOV     DI, OFFSET STRING2
            MOV     CX, LEN
            CLD
            REPZ    CMPSB
            JA      LABEL2

LABEL3:     POP     ES
            PUSH    ES
            PUSH    DS
            POP     ES
            MOV     SI, OFFSET STRING2
            MOV     DI, OFFSET STRING3
            MOV     CX, LEN
            CLD
            REPZ    CMPSB
            JA      LABEL6

LABEL7:     POP     ES
            SUB     BP, 1
            CMP     BP, 0
            JNZ     START
            LEA     DX, MSG2
            MOV     AX, 0900H   
            INT     21H
            LEA     DX, STRING1   
            MOV     AX, 0900H   
            INT     21H
            LEA     DX, STRING2  
            MOV     AX, 0900H   
            INT     21H
            LEA     DX, STRING3
            MOV     AX, 0900H   
            INT     21H
            JMP     EXIT

LABEL2:     LEA     SI, STRING1 
            MOV     AX, SEG STRING4
            MOV     ES, AX
            LEA     DI, STRING4
            MOV     CX, LEN
LABEL1: 
            MOVSB 
            LOOP    LABEL1

            LEA     SI, STRING2
            MOV     AX, SEG STRING1
            MOV     ES, AX
            LEA     DI, STRING1
            MOV     CX, LEN
LABEL4:  
            MOVSB 
            LOOP    LABEL4

            LEA     SI, STRING4 
            MOV     AX, SEG STRING2
            MOV     ES, AX
            LEA     DI, STRING2
            MOV     CX, LEN
LABEL5:  
            MOVSB 
            LOOP    LABEL5
            JMP     LABEL3
            ;----------------

LABEL6:     LEA     SI, STRING2
            MOV     AX, SEG STRING4
            MOV     ES, AX
            LEA     DI, STRING4
            MOV     CX, LEN
LABEL8: 
            MOVSB 
            LOOP    LABEL8

            LEA     SI, STRING3
            MOV     AX, SEG STRING2
            MOV     ES, AX
            LEA     DI, STRING2
            MOV     CX, LEN
LABEL9:  
            MOVSB 
            LOOP    LABEL9

            LEA     SI, STRING4 
            MOV     AX, SEG STRING3
            MOV     ES, AX
            LEA     DI, STRING3
            MOV     CX, LEN
LABEL10:  
            MOVSB 
            LOOP    LABEL10
            JMP     LABEL7

EXIT:       MOV     AX, 4C00H   
            INT     21H 
MAIN        ENDP
CODE1       ENDS
            END     MAIN

X86汇编程序设计第三次作业

第一题

代码部分

STACK       SEGMENT     PARA STACK
STACK_AREA  DW          100H DUP(?)
STACK_BTM   EQU         $ - STACK_AREA
STACK       ENDS

DATA        SEGMENT
FUNC        DW          5 DUP(?)
NOTE1       DB          'MUL RESULT ',0DH,0AH,'$'
NOTE2       DB          'DIV RESULT ',0DH,0AH,'$'
DATA1       DW          ?
DATA2       DW          ?
DATA3       DW          ?
DATA4       DW          ?
NUMBER_B    DW          1010101010101010B
            DB          0DH,0AH,'$'
PRINT_B     DB          '1010101010101010B'
            DB          0DH,0AH,'$'            
NUMBER_D    DW          1506H
            DB          0DH,0AH,'$'
PRINT_D     DB          '1506H'
            DB          0DH,0AH,'$'
OPER1       DW          10H,00H
OPER2       DW          10H,00H
SYMBOL      DB          ' : ','$'
DATA        ENDS

CODE        SEGMENT
            ASSUME      CS:CODE, DS:DATA, SS:STACK
MAIN        PROC        FAR
            MOV         AX,STACK
            MOV         SS,AX
            MOV         SP,STACK_BTM
            MOV         AX,DATA
            MOV         DS,AX
            MOV         SI,OFFSET FUNC
            MOV         BX,OFFSET FUNC1
            MOV         [SI],BX
            MOV         BX,OFFSET FUNC2
            MOV         [SI+2],BX
            MOV         BX,OFFSET FUNC3
            MOV         [SI+4],BX
            MOV         BX,OFFSET FUNC4
            MOV         [SI+6],BX
            MOV         BX,OFFSET FUNC5
            MOV         [SI+8],BX
            MOV         BX,10
            XOR         CX,CX
NEXT:       MOV         AH,1
            INT         21H
            CMP         AL,0DH
            JE          END_I
            PUSH        AX
            MOV         AX,CX
            MUL         BX
            MOV         CX,AX
            POP         AX

            SUB         AL,30H
            XOR         AH,AH
            ADD         CX,AX
            JMP         NEXT         

END_I:      MOV         BX,CX

            CALL        [SI+2]
            MOV         DL,0DH
            MOV         AH,2
            INT         21H
            MOV         DL,0AH
            MOV         AH,2
            INT         21H

            MOV         DX,OFFSET PRINT_B
            MOV         AH,9
            INT         21H

            MOV         AX,NUMBER_B
            CALL        [SI]

            MOV         DX,OFFSET PRINT_D
            MOV         AH,9
            INT         21H

            MOV         AX,NUMBER_D
            CALL        [SI]
            CALL        [SI+4]
            CALL        [SI+6]



EXIT:       MOV         AX,4C00H
            INT         21H
MAIN        ENDP

FUNC1       PROC
            PUSH        CX
            PUSH        BX
            PUSH        DX

            MOV         CX,5
            MOV         BX,10

LP1:        XOR         DX,DX
            DIV         BX
            OR          DL,30H
            PUSH        DX
            LOOP        LP1

            MOV         CX,5
LP2:        POP         DX
            MOV         AH,2
            INT         21H
            LOOP        LP2

            MOV         DL,0DH
            MOV         AH,2
            INT         21H
            MOV         DL,0AH
            MOV         AH,2
            INT         21H

            POP         DX
            POP         BX
            POP         CX
            RET
FUNC1       ENDP

FUNC2       PROC
            PUSH        AX
            PUSH        CX

            MOV         CH,4
            MOV         CL,4
            MOV         AH,0EH
H1:         ROL         BX,CL
            MOV         AL,BL
            AND         AL,0FH
            CMP         AL,9
            JL          H2
            ADD         AL,7H
H2:         ADD         AL,30H
            INT         10H
            DEC         CH
            JNZ         H1

            MOV         AL,'H'
            INT         10H

            POP         CX
            POP         AX
            RET
FUNC2       ENDP

FUNC3       PROC
            PUSH        SI
            PUSH        DI

            MOV         SI,OFFSET OPER1
            MOV         DX,[SI+2]
            MOV         AX,[SI]
            MOV         SI,OFFSET OPER2
            MOV         CX,[SI+2]
            MOV         BX,[SI]

            MOV         DATA1,0
            MOV         DATA2,0
            MOV         DATA3,0
            MOV         DATA4,0

            MOV         SI,AX
            MOV         DI,DX
            MUL         BX
            MOV         DATA2,DX
            MOV         DATA1,AX
            MOV         AX,DI
            MUL         BX
            ADD         DATA2,AX
            ADC         DATA3,DX
            MOV         AX,SI
            MUL         CX
            ADD         DATA2,AX
            ADC         DATA3,DX
            ADC         DATA4,0
            MOV         AX,DI
            MUL         CX
            ADD         DATA3,AX
            ADC         DATA4,DX

            MOV         CX,DATA4
            MOV         BX,DATA3
            MOV         DX,DATA2
            MOV         AX,DATA1
            POP         DI
            POP         SI

            PUSH        DX
            PUSH        AX
            MOV         DX,OFFSET NOTE1
            MOV         AH,9
            INT         21H
            POP         AX
            POP         DX

            PUSH        BX
            MOV         BX,CX
            CALL        [SI+2]

            PUSH        DX
            PUSH        AX
            MOV         DX,OFFSET SYMBOL
            MOV         AH,9
            INT         21H

            POP         AX
            POP         DX

            POP         BX
            CALL        [SI+2]

            PUSH        DX
            PUSH        AX
            MOV         DX,OFFSET SYMBOL
            MOV         AH,9
            INT         21H

            POP         AX
            POP         DX
            MOV         BX,DX
            CALL        [SI+2]

            PUSH        AX
            MOV         DX,OFFSET SYMBOL
            MOV         AH,9
            INT         21H

            POP         AX
            MOV         BX,AX
            CALL        [SI+2]

            MOV         DL,0DH
            MOV         AH,2
            INT         21H
            MOV         DL,0AH
            MOV         AH,2
            INT         21H
            RET
FUNC3       ENDP

FUNC4       PROC
            PUSH        SI

            MOV         SI,OFFSET OPER1
            MOV         DX,[SI+2]
            MOV         AX,[SI]
            MOV         SI,OFFSET OPER2
            MOV         CX,[SI+2]
            MOV         BX,[SI]
            TEST        CX,CX
            JNZ         LB1
            MOV         CX,BX
            CALL        FUNC5
            XOR         CX,CX
            POP         SI
            PUSH        DX
            PUSH        AX
            MOV         DX,OFFSET NOTE2
            MOV         AH,9
            INT         21H
            POP         AX
            POP         DX
            PUSH        BX
            MOV         BX,DX
            CALL        [SI+2]
            PUSH        AX
            MOV         DX,OFFSET SYMBOL
            MOV         AH,9
            INT         21H
            POP         AX
            MOV         BX,AX
            CALL        [SI+2]
            MOV         DX,OFFSET SYMBOL
            MOV         AH,9
            INT         21H
            MOV         BX,CX
            CALL        [SI+2]
            MOV         DX,OFFSET SYMBOL
            MOV         AH,9
            INT         21H
            POP         BX
            CALL        [SI+2]
            RET
LB1:        PUSH        DI
            XOR         DI,DI

LP1_S:      SUB         AX,BX
            SBB         DX,CX
            JC          VOUT
            INC         DI
            JMP         LP1_S

VOUT:       ADD         BX,AX
            ADC         CX,DX
            MOV         AX,DI
            MOV         DX,0
            POP         DI
            POP         SI
            PUSH        DX
            PUSH        AX
            MOV         DX,OFFSET NOTE2
            MOV         AH,9
            INT         21H
            POP         AX
            POP         DX
            PUSH        BX
            MOV         BX,DX
            CALL        [SI+2]

            PUSH        AX
            MOV         DX,OFFSET SYMBOL
            MOV         AH,9
            INT         21H

            POP         AX
            MOV         BX,AX
            CALL        [SI+2]

            MOV         DX,OFFSET SYMBOL
            MOV         AH,9
            INT         21H

            MOV         BX,CX
            CALL        [SI+2]

            MOV         DX,OFFSET SYMBOL
            MOV         AH,9
            INT         21H

            POP         BX
            CALL        [SI+2]
            RET
FUNC4       ENDP

FUNC5       PROC

            PUSH        AX
            MOV         AX,DX
            MOV         DX,0
            DIV         CX
            MOV         BX,AX
            POP         AX
            DIV         CX
            XCHG        BX,DX

            RET
FUNC5       ENDP

CODE        ENDS
            END         MAIN

运行截图:
这里写图片描述

第二题

代码部分:

STACK       SEGMENT     PARA STACK
STACK_AREA  DW          100H DUP(?)
STACK_BTM   EQU         $ - STACK_AREA
STACK       ENDS
DATA        SEGMENT
FUNC        DW          10 DUP(?)
BUFF_LEN    EQU         $ - BUFF
BUFF_END    DW          $
BUFF_UP     DB          'JustTest.',0DH,0AH,'$'
UP_END      DW          $
UP_INFO     DB          'RESULT',0DH,0AH,'$'
UP_LEN      EQU         UP_END - BUFF_UP
WORD_TITLE  DB          'TestFUNC4.',0DH,0AH,'$'
WORD_INFO   DB          'RESULT',0DH,0AH,'$'
WORD_TMP    DB          'TEMPW',0DH,0AH,'$'
WORD1       DB          'ABOVE',0DH,0AH,'$'
WORD2       DB          'AGAIN',0DH,0AH,'$'
WORD3       DB          'ABOUT',0DH,0AH,'$'
C_LINE      DB          0DH,0AH,'$'
WORD_LEN    DW          WORD2 - WORD1
CMP_TITLE   DB          'TestFUNC5are.',0DH,0AH,'$'
CMP_INFO    DB          'RESULT',0DH,0AH,'$'
CWORD1      DB          'Cin',0DH,0AH,'$'
CWORD2      DB          'Qin',0DH,0AH,'$'
EQU_INFO    DB          'EQUAL.',0DH,0AH,'$'
W1_INFO     DB          'WORD1 GREATER THAN WORD2.',0DH,0AH,'$'
W2_INFO     DB          'WORD1 SMALLER THAN WORD2.',0DH,0AH,'$'
CWORD_LEN   DW          CWORD2 - CWORD1
BUFF_DST    DB          'JustTest1',0DH,0AH,'$'
BUFF_SRC    DB          'JustTest2',0DH,0AH,'$' 
FUNC2_INFO  DB          'RESULT',0DH,0AH,'$'
FUNC2_LEN   EQU         BUFF_SRC - BUFF_DST
FUNC2_END   DW          $
BUFF_FUNC6  DB          'JustTest3.',0DH,0AH,'$'
FUNC6_INFO  DB          'RESULT',0DH,0AH,'$'
FUNC6_WORD  DB          'Test'
FUNC6_END   DW          $
FUNC6_LEN   EQU         FUNC6_END - FUNC6_WORD
WORD_OLD    DB          'Qinhaotong'
WORD_NEW    DB          '15061166  '
BUFF_INFO   DB          'RESULT',0DH,0AH,'$'
LEN         DW          WORD_NEW - WORD_OLD
BUFF        DB          'Just for test.',0DH,0AH
            DB          'Qinhaotong test.',0DH,0AH
            DB          0DH,0AH
            DB          '$'
FUNC7_INFO  DB          0DH,0AH
            DB          'TEST I/O.',0DH,0AH
            DB          'INPUT A STRING AND INPUT ENTER TO STOP.',0DH,0AH,'$'
STR         DB          ?           
DATA        ENDS
CODE        SEGMENT
            ASSUME      CS:CODE, DS:DATA, SS:STACK
MAIN        PROC        FAR
            MOV         AX,STACK
            MOV         SS,AX
            MOV         SP,STACK_BTM
            MOV         AX,DATA
            MOV         DS,AX
            MOV         ES,AX
            MOV         SI,FUNC
            MOV         BX,OFFSET FUNC1
            MOV         [SI],BX

            MOV         BX,OFFSET FUNC2
            MOV         [SI+2],BX

            MOV         BX,OFFSET FUNC3
            MOV         [SI+4],BX

            MOV         BX,OFFSET FUNC4
            MOV         [SI+6],BX

            MOV         BX,OFFSET FUNC5
            MOV         [SI+8],BX

            MOV         BX,OFFSET FUNC6
            MOV         [SI+10],BX

            MOV         BX,OFFSET FUNC7
            MOV         [SI+12],BX
            CALL        [SI]
            CALL        [SI+2]
            CALL        [SI+4]
            CALL        [SI+6]
            CALL        [SI+12]
            CALL        [SI+10]
            CALL        [SI+8]
EXIT:       MOV         AX,4C00H
            INT         21H
MAIN        ENDP

FUNC6       PROC
            MOV         DX,OFFSET BUFF_FUNC6
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET FUNC6_INFO
            MOV         AH,9
            INT         21H

            PUSH        DI
            PUSH        BX
            PUSH        SI
            PUSH        CX
            PUSH        AX

            MOV         DI,OFFSET BUFF_FUNC6
            MOV         BX,OFFSET FUNC6_INFO

LB1_D:      CMP         DI,BX
            JZ          FUNC6ETE_END

            MOV         SI,OFFSET FUNC6_WORD

            MOV         CX,FUNC6_LEN
            PUSH        DI

LB2_D:      MOV         AL,BYTE PTR [SI]
            CMP         BYTE PTR [DI],AL
            JNZ         CONTINUE1

            INC         SI
            INC         DI

            LOOP        LB2_D

            MOV         SI,DI
            MOV         CX,OFFSET FUNC6_INFO
            SUB         CX,DI


            POP         DI

            PUSH        DI

            CLD
            REP         MOVSB

CONTINUE1:  POP         DI
CONTINUE2:  INC         DI
            JMP         LB1_D

FUNC6ETE_END: POP           AX
            POP         CX
            POP         SI
            POP         BX
            POP         DI

            MOV         DX,OFFSET BUFF_FUNC6
            MOV         AH,9
            INT         21H
            RET
FUNC6       ENDP

FUNC1       PROC
            MOV         DX,OFFSET BUFF_UP
            MOV         AH,9
            INT         21H
            PUSH        SI
            PUSH        DI
            PUSH        CX
            PUSH        AX

            PUSH        ES
            PUSH        DS
            POP         ES
            MOV         SI,OFFSET BUFF_UP
            MOV         DI,SI
            MOV         CX,UP_LEN
            CLD

LB1_U:      LODSB
            CMP         AL,'a'
            JB          CONTINUE
            CMP         AL,'z'
            JA          CONTINUE
            SUB         AL,20H
CONTINUE:   STOSB
            LOOP        LB1_U
            POP         ES

            POP         AX
            POP         CX
            POP         DI
            POP         SI
            MOV         DX,OFFSET UP_INFO
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET BUFF_UP
            MOV         AH,9
            INT         21H
            RET
FUNC1       ENDP

FUNC2       PROC
            MOV         DX,OFFSET BUFF_DST
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET BUFF_SRC
            MOV         AH,9
            INT         21H

            PUSH        SI
            PUSH        DI
            PUSH        CX

            PUSH        ES
            PUSH        DS
            POP         ES
            MOV         SI,OFFSET BUFF_SRC
            MOV         DI,OFFSET BUFF_DST
            MOV         CX,FUNC2_LEN
            CLD
            REP         MOVSB
            POP         ES

            POP         CX
            POP         DI
            POP         SI

            MOV         DX,OFFSET FUNC2_INFO
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET BUFF_DST
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET BUFF_SRC
            MOV         AH,9
            INT         21H
            RET
FUNC2       ENDP

FUNC3       PROC
            MOV         DX,OFFSET BUFF
            MOV         AH,9
            INT         21H

            PUSH        DI
            PUSH        AX
            PUSH        BX
            PUSH        SI

            MOV         DI,OFFSET BUFF
            MOV         BX,OFFSET BUFF_END

LB1:        CMP         DI,BX
            JZ          FUNC3_END

            MOV         SI,OFFSET WORD_OLD

            MOV         CX,LEN
            PUSH        DI

LB2:        MOV         AL,BYTE PTR [SI]
            CMP         BYTE PTR [DI],AL
            JNZ         BECONTINUE

            INC         SI
            INC         DI

            LOOP        LB2

            MOV         SI,OFFSET WORD_NEW
            POP         DI
            CALL        REPL
            JMP         INCONTINUE

BECONTINUE: POP         DI
INCONTINUE: INC         DI
            JMP         LB1

FUNC3_END:  POP         SI
            POP         BX
            POP         AX
            POP         DI

            MOV         DX,OFFSET BUFF_INFO
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET BUFF
            MOV         AH,9
            INT         21H
            RET
FUNC3       ENDP

REPL        PROC
            PUSH        CX

            MOV         CX,LEN
            CLD
            REP         MOVSB

            POP         CX
            RET
REPL        ENDP

FUNC4       PROC
            MOV         DX,OFFSET WORD_TITLE
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET WORD1
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET WORD2
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET WORD3
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET C_LINE
            MOV         AH,9
            INT         21H

            PUSH        CX
            PUSH        SI
            PUSH        DI

            MOV         CX,3
LB_OUT:     PUSH        CX
            MOV         SI,OFFSET WORD1
            MOV         DI,OFFSET WORD2
            MOV         CX,WORD_LEN
            CLD
            REPZ        CMPSB

            JA          W1GW2

LB1_S:      MOV         SI,OFFSET WORD2
            MOV         DI,OFFSET WORD3
            MOV         CX,WORD_LEN
            CLD
            REPZ        CMPSB

            JA          W2GW3

            JMP         SCONTINUE

W1GW2:      MOV         SI,OFFSET WORD1
            MOV         DI,OFFSET WORD_TMP
            CALL        FUNC2_S

            MOV         SI,OFFSET WORD2
            MOV         DI,OFFSET WORD1
            CALL        FUNC2_S

            MOV         SI,OFFSET WORD_TMP
            MOV         DI,OFFSET WORD2
            CALL        FUNC2_S

            JMP         LB1_S

W2GW3:      MOV         SI,OFFSET WORD2
            MOV         DI,OFFSET WORD_TMP
            CALL        FUNC2_S

            MOV         SI,OFFSET WORD3
            MOV         DI,OFFSET WORD2
            CALL        FUNC2_S

            MOV         SI,OFFSET WORD_TMP
            MOV         DI,OFFSET WORD3
            CALL        FUNC2_S

SCONTINUE:  POP         CX
            LOOP        LB_OUT

            POP         DI
            POP         SI
            POP         CX

            MOV         DX,OFFSET WORD_INFO
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET WORD1
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET WORD2
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET WORD3
            MOV         AH,9
            INT         21H
            RET
FUNC4       ENDP

FUNC2_S         PROC
            PUSH        CX

            MOV         CX,WORD_LEN
            CLD
            REP         MOVSB

            POP         CX
            RET
FUNC2_S         ENDP

FUNC5       PROC
            MOV         DX,OFFSET CMP_TITLE
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET CWORD1
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET CWORD2
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET CMP_INFO
            MOV         AH,9
            INT         21H

            PUSH        SI

            MOV         SI,OFFSET CWORD1
            MOV         DI,OFFSET CWORD2
            MOV         CX,CWORD_LEN
            CLD
            REPZ        CMPSB

            JZ          EQUAL
            JA          W1
            JB          W2

EQUAL:      MOV         DX,OFFSET EQU_INFO
            MOV         AH,9
            INT         21H

            JMP         FUNC5_END

W1:         MOV         DX,OFFSET W1_INFO
            MOV         AH,9
            INT         21H

            JMP         FUNC5_END

W2:         MOV         DX,OFFSET W2_INFO
            MOV         AH,9
            INT         21H

            JMP         FUNC5_END


FUNC5_END:  POP         SI
            RET

FUNC5       ENDP

FUNC7           PROC
            MOV         DX,OFFSET FUNC7_INFO
            MOV         AH,9
            INT         21H

            PUSH        SI
            PUSH        AX
            PUSH        DX

            MOV         SI,OFFSET STR

LB:         MOV         AH,1
            INT         21H
            CMP         AL,0DH
            JZ          NEXT

            MOV         BYTE PTR [SI],AL
            INC         SI

            JMP         LB

NEXT:       MOV         DL,'$'
            MOV         BYTE PTR [SI],DL
            MOV         DX,OFFSET STR
            MOV         AH,9
            INT         21H

            POP         DX
            POP         AX
            POP         SI
            RET
FUNC7           ENDP

CODE        ENDS
            END         MAIN
STACK       SEGMENT     PARA STACK
STACK_AREA  DW          100H DUP(?)
STACK_BTM   EQU         $ - STACK_AREA
STACK       ENDS
DATA        SEGMENT
SP_WORD     DB          'QINHAOTONG'
SP_POS      DB          'test'
SP_INFO     DB          'RESULT',0DH,0AH,'$'
SP_LEN      EQU         SP_POS - SP_WORD
POS_LEN     EQU         SP_INFO - SP_POS
BUFF_SP     DB          'The sentence is just for test.',0DH,0AH,'$'
SP_END      DW          $
DATA        ENDS
CODE        SEGMENT
            ASSUME      CS:CODE, DS:DATA, SS:STACK
MAIN        PROC        FAR
            MOV         AX,STACK
            MOV         SS,AX
            MOV         SP,STACK_BTM
            MOV         AX,DATA
            MOV         DS,AX
            MOV         ES,AX
            MOV         DX,OFFSET BUFF_SP
            MOV         AH,9
            INT         21H
            MOV         DX,OFFSET SP_INFO
            MOV         AH,9
            INT         21H
            CALL        FUNC1
            MOV         DX,OFFSET BUFF_SP
            MOV         AH,9
            INT         21H
EXIT:       MOV         AX,4C00H
            INT         21H
MAIN        ENDP
FUNC1       PROC
            PUSH        DI
            PUSH        BX
            PUSH        SI
            PUSH        CX
            PUSH        AX
            MOV         DI,OFFSET BUFF_SP
            MOV         BX,OFFSET SP_END
LABEL1:     CMP         DI,BX
            JZ          FUNC1_END
            MOV         SI,OFFSET SP_POS
            MOV         CX,POS_LEN
            PUSH        DI
LABEL2:     MOV         AL,BYTE PTR [SI]
            CMP         BYTE PTR [DI],AL
            JNZ         LABEL3
            INC         SI
            INC         DI
            LOOP        LABEL2
            PUSH        DI
            MOV         CX,OFFSET SP_END
            SUB         CX,DI
            MOV         SI,OFFSET SP_END
            MOV         AX,SP_LEN
            MOV         DI,SI
            ADD         DI,AX
            DEC         DI
            STD
            REP         MOVSB
            POP         DI
            MOV         SI,OFFSET SP_WORD
            MOV         CX,SP_LEN
            CLD
            REP         MOVSB
LABEL3:     POP         DI
LABEL4:     INC         DI
            JMP         LABEL1
FUNC1_END:  POP         AX
            POP         CX
            POP         SI
            POP         BX
            POP         DI
            RET
FUNC1       ENDP
CODE        ENDS
            END         MAIN

运行结果:
这里写图片描述

X86汇编程序设计第四次作业

第一题

代码部分:

STACK1      SEGMENT     PARA STACK
STACK_AREA  DW          100H DUP(?)
STACK_BTM   EQU         $ - STACK_AREA
STACK1      ENDS
DATA1       SEGMENT PARA
COUNTER     DW      10
DATA1       ENDS
CODE1       SEGMENT PARA
            ASSUME  DS:DATA1, CS:CODE1, SS:STACK1

MAIN    PROC    FAR
        MOV     AX,DATA1
        MOV     DS,AX
        MOV     AX,STACK1
        MOV     SS,AX
        MOV     AX,STACK_BTM
        MOV     SP,AX
        MOV     AX,COUNTER
        PUSH    AX
        CALL    FACTORIAL
        CALL    OUTPUT
        MOV     AX,4C00H
        INT     21H     
MAIN    ENDP

FACTORIAL       PROC
        PUSH    BP  
        MOV     BP,SP
        PUSH    DX          
        PUSH    BX
        MOV     BX,[BP+4]
        CMP     BX,0
        JNZ     LAB1
        MOV     AX,1    
        JMP     LAB2

LAB1:   PUSH    BX      
        DEC     BX
        PUSH    BX
        CALL    FACTORIAL
        POP     BX
        MUL     BX


LAB2:   POP     BX
        POP     DX
        POP     BP
        RET     2

FACTORIAL       ENDP

OUTPUT      PROC
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        MOV     BX,10
        MOV     CX,0

LP1:    XOR     DX,DX
        DIV     BX
        PUSH    DX
        INC     CX
        CMP     AX,0
        JZ      LP2
        JMP     LP1

LP2:    POP     DX
        OR      DL,30H
        MOV     AH,2
        INT     21H
        LOOP        LP2

        POP     DX
        POP     CX
        POP     BX
        POP     AX

        RET
OUTPUT  ENDP

CODE1   ENDS
        END     MAIN

运行结果(N == 10):
这里写图片描述
堆栈状况说明:
这里写图片描述

第二题

代码部分:

STACK1      SEGMENT PARA STACK  
STACK_AREA  DW      100H DUP(?)  
STACK_BTM   EQU     $ - STACK_AREA  
STACK1      ENDS  

DATA1       SEGMENT  
A           DW      1506H  
B           DW      1166H  
ENT         DB      0DH,0AH,'$'  
DATA1       ENDS  

CODE1       SEGMENT  
            ASSUME  CS:CODE1,DS:DATA1,SS:STACK1  
MAIN        PROC    FAR           
            MOV     AX,STACK1  
            MOV     SS,AX  
            MOV     AX,DATA1  
            MOV     DS,AX  
            MOV     SP,STACK_BTM  
            MOV     AX,A  
            PUSH    AX  
            CALL    TOH
            MOV     DX,'H'  
            MOV     AH,02H  
            INT     21H  
            LEA     DX,ENT  
            MOV     AH,09H  
            INT     21H  
            MOV     AX,B  
            PUSH    AX  
            CALL    TOD
            LEA     DX,ENT  
            MOV     AH,09H  
            INT     21H  
            MOV     AX,A  
            PUSH    AX  
            MOV     AX,B  
            PUSH    AX  
            CALL    MUL_TEST  
            LEA     DX,ENT  
            MOV     AH,09H  
            INT     21H  
            MOV     AX,A  
            PUSH    AX  
            MOV     AX,B  
            PUSH    AX  
            CALL    DIV_TEST
            MOV     AX,4C00H  
            INT     21H  

MAIN        ENDP  

TOH         PROC    NEAR
            PUSH    AX
            PUSH    BX  
            PUSH    CX  
            PUSH    DX  
            PUSH    BP  
            MOV     BP,SP  
            MOV     AX,[BP+12]  
            XOR     CX,CX  
            MOV     BX,16  
LOOP_TOH:   MOV     DX,0  
            DIV     BX  
            CMP     DX,10  
            JAE     LABEL1  
            OR      DL,30H  
            JMP     LABEL2  

LABEL1:     ADD     DX,57H  

LABEL2:     PUSH    DX  
            INC     CX  
            CMP     AX,0  
            JZ      PRINTH  
            JMP     LOOP_TOH  

PRINTH:  
            POP     DX  
            MOV     AH,02H  
            INT     21H  
            LOOP    PRINTH  

            POP     BP  
            POP     DX  
            POP     CX  
            POP     BX  
            POP     AX  


            RET     2  
TOH         ENDP      

TOD         PROC    NEAR
            PUSH    AX
            PUSH    BX  
            PUSH    CX  
            PUSH    DX  
            PUSH    BP
            MOV     BP,SP  
            MOV     AX,[BP+12]  
            XOR     CX,CX  
            MOV     BX,10  
LOOP_TOD:   MOV     DX,0  
            DIV     BX  
            OR      DL,30H  
            PUSH    DX  
            INC     CX  
            CMP     AX,0  
            JZ      PRINT_DEC  
            JMP     LOOP_TOD  

PRINT_DEC:  POP     DX  
            MOV     AH,02H  
            INT     21H  
            LOOP    PRINT_DEC 
            POP     BP  
            POP     DX  
            POP     CX  
            POP     BX  
            POP     AX  
            RET     2  
TOD      ENDP      

MUL_TEST    PROC    NEAR
            PUSH    AX  
            PUSH    BX  
            PUSH    DX  
            PUSH    BP  

            MOV     BP,SP  
            MOV     AX,[BP+12]  
            MOV     BX,[BP+10]  
            MUL     BX  

            PUSH    DX  
            CALL    TOH  
            PUSH    AX  
            CALL    TOH  

            MOV     DX,'H'  
            MOV     AH,02H  
            INT     21H  

            POP     BP  
            POP     DX  
            POP     BX  
            POP     AX      
            RET     4  
MUL_TEST    ENDP  

DIV_TEST    PROC    NEAR
            PUSH    AX  
            PUSH    BX  
            PUSH    DX  
            PUSH    BP  
            MOV     BP,SP  
            MOV     AX,[BP+12]  
            MOV     BX,[BP+10]  
            XOR     DX,DX  
            DIV     BX  
            PUSH    DX  
            CALL    TOH
            MOV     DX,'H'  
            MOV     AH,02H  
            INT     21H
            LEA     DX,ENT  
            MOV     AH,09H  
            INT     21H
            PUSH    AX  
            CALL    TOH
            MOV     DX,'H'  
            MOV     AH,02H  
            INT     21H 
            POP     BP  
            POP     DX  
            POP     BX  
            POP     AX  
            RET     4     
DIV_TEST    ENDP  

CODE1     ENDS  
            END     MAIN

运行截图:
这里写图片描述

第三题

代码部分:

STACK       SEGMENT     PARA STACK
STACK_AREA  DW          100H DUP(?)
STACK_BTM   EQU         $ - STACK_AREA
STACK       ENDS
DATA        SEGMENT
FUNC        DW          10 DUP(?)
BUFF_LEN    EQU         $ - BUFF
BUFF_END    DW          $
BUFF_UP     DB          'JustTest.',0DH,0AH,'$'
UP_END      DW          $
UP_INFO     DB          'RESULT',0DH,0AH,'$'
UP_LEN      EQU         UP_END - BUFF_UP
WORD_TITLE  DB          'TestFUNC4.',0DH,0AH,'$'
WORD_INFO   DB          'RESULT',0DH,0AH,'$'
WORD_TMP    DB          'TEMPW',0DH,0AH,'$'
WORD1       DB          'ABOVE',0DH,0AH,'$'
WORD2       DB          'AGAIN',0DH,0AH,'$'
WORD3       DB          'ABOUT',0DH,0AH,'$'
C_LINE      DB          0DH,0AH,'$'
WORD_LEN    DW          WORD2 - WORD1
CMP_TITLE   DB          'TestFUNC5are.',0DH,0AH,'$'
CMP_INFO    DB          'RESULT',0DH,0AH,'$'
CWORD1      DB          'Cin',0DH,0AH,'$'
CWORD2      DB          'Qin',0DH,0AH,'$'
EQU_INFO    DB          'EQUAL.',0DH,0AH,'$'
W1_INFO     DB          'WORD1 GREATER THAN WORD2.',0DH,0AH,'$'
W2_INFO     DB          'WORD1 SMALLER THAN WORD2.',0DH,0AH,'$'
CWORD_LEN   DW          CWORD2 - CWORD1
BUFF_DST    DB          'JustTest1',0DH,0AH,'$'
BUFF_SRC    DB          'JustTest2',0DH,0AH,'$' 
FUNC2_INFO  DB          'RESULT',0DH,0AH,'$'
FUNC2_LEN   EQU         BUFF_SRC - BUFF_DST
FUNC2_END   DW          $
BUFF_FUNC6  DB          'JustTest3.',0DH,0AH,'$'
FUNC6_INFO  DB          'RESULT',0DH,0AH,'$'
FUNC6_WORD  DB          'Test'
FUNC6_END   DW          $
FUNC6_LEN   EQU         FUNC6_END - FUNC6_WORD
WORD_OLD    DB          'Qinhaotong'
WORD_NEW    DB          '15061166  '
BUFF_INFO   DB          'RESULT',0DH,0AH,'$'
LEN         DW          WORD_NEW - WORD_OLD
BUFF        DB          'Just for test.',0DH,0AH
            DB          'Qinhaotong test.',0DH,0AH
            DB          0DH,0AH
            DB          '$'
FUNC7_INFO  DB          0DH,0AH
            DB          'TEST I/O.',0DH,0AH
            DB          'INPUT A STRING AND INPUT ENTER TO STOP.',0DH,0AH,'$'
STR         DB          ?           
DATA        ENDS
CODE        SEGMENT
            ASSUME      CS:CODE, DS:DATA, SS:STACK
MAIN        PROC        FAR
            MOV         AX,STACK
            MOV         SS,AX
            MOV         SP,STACK_BTM
            MOV         AX,DATA
            MOV         DS,AX
            MOV         ES,AX
            MOV         SI,FUNC
            MOV         BX,OFFSET FUNC1
            MOV         [SI],BX

            MOV         BX,OFFSET FUNC2
            MOV         [SI+2],BX

            MOV         BX,OFFSET FUNC3
            MOV         [SI+4],BX

            MOV         BX,OFFSET FUNC4
            MOV         [SI+6],BX

            MOV         BX,OFFSET FUNC5
            MOV         [SI+8],BX

            MOV         BX,OFFSET FUNC6
            MOV         [SI+10],BX

            MOV         BX,OFFSET FUNC7
            MOV         [SI+12],BX
            CALL        [SI]
            CALL        [SI+2]
            CALL        [SI+4]
            CALL        [SI+6]
            CALL        [SI+12]
            CALL        [SI+10]
            CALL        [SI+8]
EXIT:       MOV         AX,4C00H
            INT         21H
MAIN        ENDP

FUNC6       PROC
            MOV         DX,OFFSET BUFF_FUNC6
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET FUNC6_INFO
            MOV         AH,9
            INT         21H

            PUSH        DI
            PUSH        BX
            PUSH        SI
            PUSH        CX
            PUSH        AX

            MOV         DI,OFFSET BUFF_FUNC6
            MOV         BX,OFFSET FUNC6_INFO

LB1_D:      CMP         DI,BX
            JZ          FUNC6ETE_END

            MOV         SI,OFFSET FUNC6_WORD

            MOV         CX,FUNC6_LEN
            PUSH        DI

LB2_D:      MOV         AL,BYTE PTR [SI]
            CMP         BYTE PTR [DI],AL
            JNZ         CONTINUE1

            INC         SI
            INC         DI

            LOOP        LB2_D

            MOV         SI,DI
            MOV         CX,OFFSET FUNC6_INFO
            SUB         CX,DI


            POP         DI

            PUSH        DI

            CLD
            REP         MOVSB

CONTINUE1:  POP         DI
CONTINUE2:  INC         DI
            JMP         LB1_D

FUNC6ETE_END: POP           AX
            POP         CX
            POP         SI
            POP         BX
            POP         DI

            MOV         DX,OFFSET BUFF_FUNC6
            MOV         AH,9
            INT         21H
            RET
FUNC6       ENDP

FUNC1       PROC
            MOV         DX,OFFSET BUFF_UP
            MOV         AH,9
            INT         21H
            PUSH        SI
            PUSH        DI
            PUSH        CX
            PUSH        AX

            PUSH        ES
            PUSH        DS
            POP         ES
            MOV         SI,OFFSET BUFF_UP
            MOV         DI,SI
            MOV         CX,UP_LEN
            CLD

LB1_U:      LODSB
            CMP         AL,'a'
            JB          CONTINUE
            CMP         AL,'z'
            JA          CONTINUE
            SUB         AL,20H
CONTINUE:   STOSB
            LOOP        LB1_U
            POP         ES

            POP         AX
            POP         CX
            POP         DI
            POP         SI
            MOV         DX,OFFSET UP_INFO
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET BUFF_UP
            MOV         AH,9
            INT         21H
            RET
FUNC1       ENDP

FUNC2       PROC
            MOV         DX,OFFSET BUFF_DST
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET BUFF_SRC
            MOV         AH,9
            INT         21H

            PUSH        SI
            PUSH        DI
            PUSH        CX

            PUSH        ES
            PUSH        DS
            POP         ES
            MOV         SI,OFFSET BUFF_SRC
            MOV         DI,OFFSET BUFF_DST
            MOV         CX,FUNC2_LEN
            CLD
            REP         MOVSB
            POP         ES

            POP         CX
            POP         DI
            POP         SI

            MOV         DX,OFFSET FUNC2_INFO
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET BUFF_DST
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET BUFF_SRC
            MOV         AH,9
            INT         21H
            RET
FUNC2       ENDP

FUNC3       PROC
            MOV         DX,OFFSET BUFF
            MOV         AH,9
            INT         21H

            PUSH        DI
            PUSH        AX
            PUSH        BX
            PUSH        SI

            MOV         DI,OFFSET BUFF
            MOV         BX,OFFSET BUFF_END

LB1:        CMP         DI,BX
            JZ          FUNC3_END

            MOV         SI,OFFSET WORD_OLD

            MOV         CX,LEN
            PUSH        DI

LB2:        MOV         AL,BYTE PTR [SI]
            CMP         BYTE PTR [DI],AL
            JNZ         BECONTINUE

            INC         SI
            INC         DI

            LOOP        LB2

            MOV         SI,OFFSET WORD_NEW
            POP         DI
            CALL        REPL
            JMP         INCONTINUE

BECONTINUE: POP         DI
INCONTINUE: INC         DI
            JMP         LB1

FUNC3_END:  POP         SI
            POP         BX
            POP         AX
            POP         DI

            MOV         DX,OFFSET BUFF_INFO
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET BUFF
            MOV         AH,9
            INT         21H
            RET
FUNC3       ENDP

REPL        PROC
            PUSH        CX

            MOV         CX,LEN
            CLD
            REP         MOVSB

            POP         CX
            RET
REPL        ENDP

FUNC4       PROC
            MOV         DX,OFFSET WORD_TITLE
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET WORD1
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET WORD2
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET WORD3
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET C_LINE
            MOV         AH,9
            INT         21H

            PUSH        CX
            PUSH        SI
            PUSH        DI

            MOV         CX,3
LB_OUT:     PUSH        CX
            MOV         SI,OFFSET WORD1
            MOV         DI,OFFSET WORD2
            MOV         CX,WORD_LEN
            CLD
            REPZ        CMPSB

            JA          W1GW2

LB1_S:      MOV         SI,OFFSET WORD2
            MOV         DI,OFFSET WORD3
            MOV         CX,WORD_LEN
            CLD
            REPZ        CMPSB

            JA          W2GW3

            JMP         SCONTINUE

W1GW2:      MOV         SI,OFFSET WORD1
            MOV         DI,OFFSET WORD_TMP
            CALL        FUNC2_S

            MOV         SI,OFFSET WORD2
            MOV         DI,OFFSET WORD1
            CALL        FUNC2_S

            MOV         SI,OFFSET WORD_TMP
            MOV         DI,OFFSET WORD2
            CALL        FUNC2_S

            JMP         LB1_S

W2GW3:      MOV         SI,OFFSET WORD2
            MOV         DI,OFFSET WORD_TMP
            CALL        FUNC2_S

            MOV         SI,OFFSET WORD3
            MOV         DI,OFFSET WORD2
            CALL        FUNC2_S

            MOV         SI,OFFSET WORD_TMP
            MOV         DI,OFFSET WORD3
            CALL        FUNC2_S

SCONTINUE:  POP         CX
            LOOP        LB_OUT

            POP         DI
            POP         SI
            POP         CX

            MOV         DX,OFFSET WORD_INFO
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET WORD1
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET WORD2
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET WORD3
            MOV         AH,9
            INT         21H
            RET
FUNC4       ENDP

FUNC2_S         PROC
            PUSH        CX

            MOV         CX,WORD_LEN
            CLD
            REP         MOVSB

            POP         CX
            RET
FUNC2_S         ENDP

FUNC5       PROC
            MOV         DX,OFFSET CMP_TITLE
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET CWORD1
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET CWORD2
            MOV         AH,9
            INT         21H

            MOV         DX,OFFSET CMP_INFO
            MOV         AH,9
            INT         21H

            PUSH        SI

            MOV         SI,OFFSET CWORD1
            MOV         DI,OFFSET CWORD2
            MOV         CX,CWORD_LEN
            CLD
            REPZ        CMPSB

            JZ          EQUAL
            JA          W1
            JB          W2

EQUAL:      MOV         DX,OFFSET EQU_INFO
            MOV         AH,9
            INT         21H

            JMP         FUNC5_END

W1:         MOV         DX,OFFSET W1_INFO
            MOV         AH,9
            INT         21H

            JMP         FUNC5_END

W2:         MOV         DX,OFFSET W2_INFO
            MOV         AH,9
            INT         21H

            JMP         FUNC5_END


FUNC5_END:  POP         SI
            RET

FUNC5       ENDP

FUNC7           PROC
            MOV         DX,OFFSET FUNC7_INFO
            MOV         AH,9
            INT         21H

            PUSH        SI
            PUSH        AX
            PUSH        DX

            MOV         SI,OFFSET STR

LB:         MOV         AH,1
            INT         21H
            CMP         AL,0DH
            JZ          NEXT

            MOV         BYTE PTR [SI],AL
            INC         SI

            JMP         LB

NEXT:       MOV         DL,'$'
            MOV         BYTE PTR [SI],DL
            MOV         DX,OFFSET STR
            MOV         AH,9
            INT         21H

            POP         DX
            POP         AX
            POP         SI
            RET
FUNC7           ENDP

CODE        ENDS
            END         MAIN
STACK       SEGMENT     PARA STACK
STACK_AREA  DW          100H DUP(?)
STACK_BTM   EQU         $ - STACK_AREA
STACK       ENDS
DATA        SEGMENT
SP_WORD     DB          'QINHAOTONG'
SP_POS      DB          'test'
SP_INFO     DB          'RESULT',0DH,0AH,'$'
SP_LEN      EQU         SP_POS - SP_WORD
POS_LEN     EQU         SP_INFO - SP_POS
BUFF_SP     DB          'The sentence is just for test.',0DH,0AH,'$'
SP_END      DW          $
DATA        ENDS
CODE        SEGMENT
            ASSUME      CS:CODE, DS:DATA, SS:STACK
MAIN        PROC        FAR
            MOV         AX,STACK
            MOV         SS,AX
            MOV         SP,STACK_BTM
            MOV         AX,DATA
            MOV         DS,AX
            MOV         ES,AX
            MOV         DX,OFFSET BUFF_SP
            MOV         AH,9
            INT         21H
            MOV         DX,OFFSET SP_INFO
            MOV         AH,9
            INT         21H
            CALL        FUNC1
            MOV         DX,OFFSET BUFF_SP
            MOV         AH,9
            INT         21H
EXIT:       MOV         AX,4C00H
            INT         21H
MAIN        ENDP
FUNC1       PROC
            PUSH        DI
            PUSH        BX
            PUSH        SI
            PUSH        CX
            PUSH        AX
            MOV         DI,OFFSET BUFF_SP
            MOV         BX,OFFSET SP_END
LABEL1:     CMP         DI,BX
            JZ          FUNC1_END
            MOV         SI,OFFSET SP_POS
            MOV         CX,POS_LEN
            PUSH        DI
LABEL2:     MOV         AL,BYTE PTR [SI]
            CMP         BYTE PTR [DI],AL
            JNZ         LABEL3
            INC         SI
            INC         DI
            LOOP        LABEL2
            PUSH        DI
            MOV         CX,OFFSET SP_END
            SUB         CX,DI
            MOV         SI,OFFSET SP_END
            MOV         AX,SP_LEN
            MOV         DI,SI
            ADD         DI,AX
            DEC         DI
            STD
            REP         MOVSB
            POP         DI
            MOV         SI,OFFSET SP_WORD
            MOV         CX,SP_LEN
            CLD
            REP         MOVSB
LABEL3:     POP         DI
LABEL4:     INC         DI
            JMP         LABEL1
FUNC1_END:  POP         AX
            POP         CX
            POP         SI
            POP         BX
            POP         DI
            RET
FUNC1       ENDP
CODE        ENDS
            END         MAIN

运行结果:
这里写图片描述
这里写图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值