欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

x86汇编课程总结

程序员文章站 2024-03-02 11:56:28
...

第一次作业

1、改例题 降序 “班号学号”水印

debug下呈现结果 -> txt

2、显示第一题排序前后结果(16进制显示)

3、显示10进制结果


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      EXIT
                JMP     SHORT LP1

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

DISP_DATA:      LEA     SI,TABLE
                MOV     CX,TABLE_LEN
DL1:            MOV     AX,[SI]
                CALL    PRINT
                ADD     SI,2
                LOOP    DL1
                RET


PRINT:          MOV   AX, [SI]
                MOV   BX, 10
                PUSH  CX
                MOV   CX, 0
ZH1:            MOV   DX, 0
                DIV   BX
                ADD   DL, '0'
                PUSH  DX
                INC   CX
                CMP   AX, 0
                JNZ   ZH1
                MOV   AH, 2
ZH2:            POP   DX
                INT   21H
                LOOP  ZH2
                MOV   DL, ' '
                INT   21H
                POP   CX
                RET

CODE1           ENDS
                END     MAIN

运行结果截图:

x86汇编课程总结(运行前)

x86汇编课程总结(运行后)

x86汇编课程总结


第二次作业

1、 设计strcpy,考虑三种场景,显示复制前后的结果(可选:大于64K,四个小时)

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

DATA        SEGMENT     PARA
STR1        DB          'Test line1:Good morning!'
STR1_LEN    DW          $ - STR1
STR2        DB          'TEST LINE2'
STR2_LEN    DW          $ - STR2
BUFF        DB          200 DUP(?)
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
            
            XOR         AX,AX
            MOV         SI,OFFSET STR1
            MOV         DI,OFFSET BUFF
            CLD
            MOV         CX,STR1_LEN

COPY:
            LODSB
            STOSB
            LOOP        COPY

            XOR         AX,AX
            MOV         SI,OFFSET BUFF
            MOV         DI,OFFSET STR1
            ADD         DI,4
            CLD
            MOV         CX,STR1_LEN

COPY_2:
            LODSB
            STOSB
            LOOP        COPY_2


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

运行结果截图:

x86汇编课程总结(第一种)

x86汇编课程总结(第二种)

x86汇编课程总结(第三种)

2、 大小写转换

DATA        SEGMENT
BUF         DB          'Hello',13,10,'END$'
DATA        ENDS

STACK       SEGMENT
            DB          100 DUP(?)
STACK       ENDS

CODE        SEGMENT
            ASSUME      CS:CODE,DS:DATA,SS:STACK
MAIN        PROC        FAR
            MOV         AX,DATA
            MOV         DS,AX
            LEA         BX,BUF
LA:
            MOV         DL,[BX]
            CMP         DL,'$'
            JZ          EXIT
            CMP         DL,'a'
            JB          K
            CMP         DL,'z'
            JA          K
            SUB         DL,20H

K:          MOV         [BX],DL
            INC         BX
            JMP         LA

EXIT:       MOV         AH,4CH
            INT         21H

CODE        ENDS
            END         MAIN

运行结果截图:

x86汇编课程总结


第三次作业:

上机题3

1、 编写综合程序,构成子程序表(函数表)

实现:-> 十六,十六-> 十, 二 -> 十,乘除

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

DATA1       SEGMENT
MESG1       DB      'TEN TO SIXTEEN$'
MESG2       DB      'SIXTEEN TO TEN$'
MESG3       DB      'TWO TO TEN$'
MESG4       DB      'MULTIPLY$'
MESG5       DB      'DIVISION$'
MESG6       DB      '1.TEN2SIXTEEN 2.SIXTEEN2TEN 3.TWO2TEN 4.MUL 5.DIV$'
FUNC        DW      4 DUP(?)
DATA1       ENDS

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

GETNUM      MACRO
            MOV     AH, 1
            INT     21H
            SUB     AL, 30H
            XOR     AH, AH
            ENDM

NEWLINE     MACRO
            PUSH    DX
            PUSH    AX
            MOV     DL, 0AH
            MOV     AH, 02H
            INT     21H
            POP     AX
            POP     DX
            ENDM

DISPSTR     PROC
            MOV     AH, 09H
            INT     21H
            MOV     DL, 0AH
            MOV     AH, 02H
            INT     21H
            RET
DISPSTR     ENDP

DISPTEN     PROC
            PUSH    BX
            PUSH    DX
            PUSH    CX
            XOR     CX, CX
            MOV     BX, 10
DISPTENLP:  XOR     DX, DX
            DIV     BX
            ADD     DX, 30H
            PUSH    DX
            INC     CX
            CMP     AX, 0
            JE      DISPTENLP2
            JMP     DISPTENLP

DISPTENLP2: POP     DX
            MOV     AH, 2
            INT     21H
            LOOP    DISPTENLP2

            POP     CX
            POP     DX
            POP     BX
            RET
DISPTEN     ENDP



DISPNUM     PROC
            PUSH    BX
            PUSH    CX
            PUSH    DX
            MOV     BX, 10H
            MOV     CX, 4
DISPNUMLP1: XOR     DX, DX
            DIV     BX
            CMP     DL, 10
            JAE     DISPNUMIF
            ADD     DL, 30H
            JMP     DISPNUMCO
DISPNUMIF:  ADD     DL, 37H
DISPNUMCO:  PUSH    DX
            LOOP    DISPNUMLP1

            MOV     CX, 4
DISPNUMLP2: POP     DX
            MOV     AH, 2
            INT     21H
            LOOP    DISPNUMLP2

            POP     DX
            POP     CX
            POP     BX
            RET
DISPNUM     ENDP
            
GETSIXTNUM  PROC
            MOV     AH, 1
            INT     21H
            CMP     AL, 40H
            JAE     IFMORE
            SUB     AL, 30H
            JMP     OUTIF
IFMORE:     SUB     AL, 37H
OUTIF:      XOR     AH, AH
            RET
GETSIXTNUM  ENDP

GETTWO		PROC
			PUSH 	BX
			XOR 	BX, BX
GETTWOLP:	GETNUM
			XOR 	AH, AH
			CMP 	AL, 0F4H
			JZ 		RETURN
			SHL 	BX, 1
			ADD 	BX, AX
			JMP 	GETTWOLP

RETURN:		MOV 	AX, BX
			POP 	BX
			RET
GETTWO 		ENDP

GETSIXT     PROC
            PUSH    BX
            PUSH    CX
            MOV     CX, 4
            XOR     BX, BX
GETSIXTLP:  CALL    GETSIXTNUM
            PUSH    CX
            MOV     CL, 4
            SHL     BX, CL
            ADD     BX, AX
            POP     CX
            LOOP    GETSIXTLP

            MOV     AX, BX
            POP     CX
            POP     BX
            RET
GETSIXT     ENDP

GETTEN      PROC
            PUSH    BX
            PUSH    CX
            PUSH    DX
            MOV     CX, 4
            XOR     BX, BX
            MOV     BX, 10
            XOR     DX, DX
GETTENLP:   MOV     AX, DX
            MUL     BL
            MOV     DX, AX
            GETNUM
            ADD     DX, AX
            LOOP    GETTENLP

            MOV     AX, DX
            POP     DX
            POP     CX
            POP     BX
            RET
GETTEN      ENDP


MAIN        PROC    FAR
            MOV     AX, STACK1
            MOV     SS, AX
            MOV     SP, STACK_BTM
            MOV     AX, DATA1
            MOV     DS, AX
            MOV     ES, AX

            MOV     SI, OFFSET FUNC
            MOV     BX, OFFSET TEN2SIXTEEN
            MOV     [SI], BX
            MOV     BX, OFFSET SIXTEEN2TEN
            MOV     [SI+2], BX
            MOV     BX, OFFSET TWO2TEN
            MOV     [SI+4], BX
            MOV     BX, OFFSET MULTIPLY
            MOV     [SI+6], BX
            MOV     BX, OFFSET DIVISION
            MOV     [SI+8], BX

MAINLP:     MOV     DX, OFFSET MESG6
            CALL    DISPSTR
            NEWLINE
            GETNUM
            NEWLINE
            CMP     AL, 0
            JE      EXIT
            DEC     AL
            SHL     AL, 1
            MOV     BL, AL
            XOR     BH, BH
            CALL    [SI+BX]
            JMP     MAINLP


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

TEN2SIXTEEN PROC
            MOV     DX, OFFSET MESG1
            CALL    DISPSTR
            NEWLINE
            CALL    GETTEN
            NEWLINE
            CALL    DISPNUM
            NEWLINE
            RET
TEN2SIXTEEN ENDP

SIXTEEN2TEN PROC
            MOV     DX, OFFSET MESG2
            CALL    DISPSTR
            NEWLINE
            CALL    GETSIXT
            NEWLINE
            CALL    DISPTEN
            NEWLINE
            RET
SIXTEEN2TEN ENDP

TWO2TEN     PROC
            MOV     DX, OFFSET MESG3
            CALL    DISPSTR
            NEWLINE
            CALL    GETTWO
            NEWLINE
            CALL    DISPTEN
            NEWLINE
            RET
TWO2TEN     ENDP

MULTIPLY    PROC
            MOV     DX, OFFSET MESG4
            CALL    DISPSTR
            NEWLINE
            CALL    GETSIXT
            MOV     BX, AX
            NEWLINE
            CALL    GETSIXT
            NEWLINE
            XOR     DX, DX
            MUL     BX
            PUSH    AX
            MOV     AX, DX
            CALL    DISPNUM
            POP     AX
            CALL    DISPNUM
            NEWLINE
            RET
MULTIPLY    ENDP

DIVISION    PROC
            MOV     DX, OFFSET MESG5
            CALL    DISPSTR
            NEWLINE
            CALL    GETSIXT
            PUSH    AX
            NEWLINE
            CALL    GETSIXT
            NEWLINE
            MOV     BX, AX
            POP     AX
            XOR     DX, DX
            DIV     BX
            CALL    DISPNUM
            NEWLINE
            MOV     AX, DX
            CALL    DISPNUM
            NEWLINE
            RET
DIVISION    ENDP
            

CODE1       ENDS
            END     MAIN

运行结果截图:

x86汇编课程总结

x86汇编课程总结

x86汇编课程总结 

2、 字符串,同上

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

DATA1           SEGMENT
MESG1           DB      'UPPER TO LOWER$'
MESG2           DB      'STRING CONCATENATION$'
MESG3           DB      'STRING SLICE$'
MESG4           DB      'STRING COPY$'
MESG5           DB      'STRING SEARCH$'
MESG            DB      '1.CONVERT 2.CONCATENATE 3.SLICE 4.COPY 5.SEARCH$'
MESGMAT1        DB      'MATCH!$'
MESGMAT0        DB      'NOT MATCH!$'
FUNC            DW      7 DUP(?)
BUF             DB      40H
LEN             DB      ?
STRING          DB      40H DUP(?)
BUF2            DB      40H
LEN2            DB      ?
STRING2         DB      40H DUP(?)
DATA1           ENDS

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

GETNUM 		    MACRO
                MOV 	AH, 1
                INT 	21H
                SUB 	AL, 30H
                XOR 	AH, AH
                ENDM

DISPSTR	    	MACRO
                MOV 	AH, 09H
                INT 	21H
                ENDM

NEWLINE     	MACRO
                PUSH 	DX
                PUSH 	AX
                MOV 	DL, 0AH
                MOV 	AH, 02H
                INT 	21H
                POP 	AX
                POP 	DX
                ENDM

GETSTR  		MACRO
                PUSH 	AX
                PUSH 	BX
                PUSH 	SI
                PUSH 	DX
                MOV 	AH, 0AH
                INT 	21H
                NEWLINE
                POP 	SI
                XOR 	BX, BX
                MOV 	BL, [SI+1]			;LENGTH
                MOV 	BYTE PTR [SI+BX+2], '$'
                POP 	SI
                POP 	BX
                POP 	AX
                ENDM

DISPNUM         PROC
                PUSH    BX
                PUSH    CX
                PUSH    DX
                MOV     BX, 10H
                MOV     CX, 4
DISPNUMLP1:     XOR     DX, DX
                DIV     BX
                CMP     DL, 10
                JAE     DISPNUMIF
                ADD     DL, 30H
                JMP     DISPNUMCO
DISPNUMIF:      ADD     DL, 37H
DISPNUMCO:      PUSH    DX
                LOOP    DISPNUMLP1

                MOV     CX, 4
DISPNUMLP2:     POP     DX
                MOV     AH, 2
                INT     21H
                LOOP    DISPNUMLP2

                POP     DX
                POP     CX
                POP     BX
                RET
DISPNUM         ENDP

MAIN            PROC    FAR
                MOV     AX, STACK1
                MOV     SS, AX
                MOV     AX, DATA1
                MOV     DS, AX
                MOV     ES, AX

                MOV     SI, OFFSET FUNC
                MOV     BX, OFFSET CONV_FUNC
                MOV     [SI], BX
                MOV     BX, OFFSET CONCA_FUNC
                MOV     [SI+2], BX
                MOV     BX, OFFSET SLICE_FUNC
                MOV     [SI+4], BX
                MOV     BX, OFFSET COPY_FUNC
                MOV     [SI+6], BX
                MOV     BX, OFFSET SEARCH_FUNC
                MOV     [SI+8], BX

                MOV     DX, OFFSET MESG
                DISPSTR
                NEWLINE
                GETNUM
                NEWLINE
                CMP     AL, 0
                JE      EXIT
                DEC     AL
                SHL     AL, 1
                MOV     BL, AL
                XOR     BH, BH
                CALL    [SI+BX]  

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

SEARCH_FUNC     PROC

                MOV     DX, OFFSET BUF
                GETSTR
                MOV 	DX, OFFSET BUF2
                GETSTR
                MOV 	SI, OFFSET STRING
                MOV 	DI, OFFSET STRING2
                PUSH 	DI
                PUSH 	SI
                CALL 	SEARCH
                CMP 	AX, 0
                JZ 		NOFOUND
                MOV 	DX, OFFSET MESGMAT1
                DISPSTR
                NEWLINE
                JMP 	FDEND
NOFOUND:	    MOV 	DX, OFFSET MESGMAT0
                DISPSTR
                NEWLINE
FDEND:		    RET

SEARCH_FUNC     ENDP



COPY_FUNC       PROC

                MOV     DX, OFFSET BUF
                GETSTR
                NEWLINE
                XOR     DX, DX
                MOV     DL, LEN
                INC     DX
                PUSH    DX
                MOV     BX, OFFSET STRING
                ADD     BX, DX
                DEC     BX
                PUSH    BX
                MOV     BX, OFFSET STRING
                PUSH    BX
                CALL    COPY
                MOV     DX, OFFSET STRING
                DISPSTR

                RET
COPY_FUNC       ENDP


SLICE_FUNC      PROC

                MOV     DX, OFFSET BUF
                GETSTR
                NEWLINE
                GETNUM
                NEWLINE
                MOV     BX, AX
                GETNUM
                NEWLINE
                MOV     CX, AX
                SUB     CX, BX
                MOV     SI, OFFSET STRING
                ADD     SI, BX
                CLD
SLICEFUNCLP:    XOR     AX, AX
                LODSB
                MOV     DX, AX
                MOV     AH, 2
                INT     21H
                LOOP    SLICEFUNCLP

                RET
SLICE_FUNC      ENDP


                

CONCA_FUNC      PROC

                MOV     DX, OFFSET BUF
                GETSTR
                NEWLINE
                MOV     DX, OFFSET BUF2
                GETSTR
                NEWLINE      
                XOR     DX, DX      
                MOV     DL, LEN2
                INC     DX
                PUSH    DX
                XOR     DX, DX
                MOV     DL, LEN
                MOV     BX, OFFSET STRING
                ADD     BX, DX
                PUSH    BX
                MOV     DX, OFFSET STRING2
                PUSH    DX
                CALL    COPY
                MOV     DX, OFFSET STRING
                DISPSTR
                RET
CONCA_FUNC      ENDP

CONV_FUNC       PROC
                
                MOV    DX, OFFSET BUF
                GETSTR
                NEWLINE
                MOV     SI, DX
                XOR     BX, BX
                MOV     BL, [SI+1]      ;   LEN
                PUSH    BX
                MOV     DX, OFFSET STRING
                PUSH    DX
                CALL    CONVERT
                MOV     DX, OFFSET STRING
                DISPSTR
                NEWLINE
                RET
CONV_FUNC       ENDP

CONVERT         PROC
                PUSH    BP
                MOV     BP, SP

                PUSH    DI
                PUSH    SI
                PUSH    DX
                PUSH    CX
                MOV     DI, [BP+4]      ;   DI IS STRING
                MOV     SI, DI
                MOV     CX, [BP+6]      ;   CX IS LEN
                CLD
CONVERTLP:      LODSB
                CMP     AL, 'A'
                JB      CONTINUE
                CMP     AL, 'Z'
                JA      CONTINUE
                ADD     AL, 20H
CONTINUE:       STOSB
                LOOP    CONVERTLP

                POP     CX
                POP     DX
                POP     SI
                POP     DI
                POP     BP
                RET     4
CONVERT         ENDP

MATCH           PROC
                PUSH    BP
                MOV     BP, SP
                PUSH    SI
                PUSH    DI
                MOV     SI, [BP+4]  ;   PATTEN STRING
                MOV     DI, [BP+6]  ;   MAIN STRING
                CLD
MATCHLP:        LODSB
                CMP     AL, '$'
                JE      MATL2
                CMP     AL, [DI]
                JNE     MATL1
                INC     DI
                JMP     MATCHLP
MATL1:          MOV     AX, 0
                JMP     MATOUT
MATL2:          MOV     AX, 1
                JMP     MATOUT
MATOUT:         POP     DI
                POP     SI
                POP     BP
                RET     4
MATCH           ENDP

COPY		    PROC
                PUSH 	BP
                MOV 	BP, SP
                PUSH 	CX
                PUSH 	SI
                PUSH 	DI
                MOV 	SI, [BP+4]
                MOV 	DI, [BP+6]
                MOV 	CX, [BP+8]
                CMP 	SI, DI
                JAE		FOWARD
                ADD 	SI, CX
                CMP 	SI, DI
                JBE		FOWARD
                DEC 	SI
                ADD 	DI, CX
                DEC 	DI
                STD
                REP 	MOVSB
                JMP 	COPYOUT
FOWARD:         MOV 	SI, [BP+4]
                CLD
                REP 	MOVSB
COPYOUT:	    POP 	DI
                POP 	SI
                POP 	CX
                POP 	BP
                RET 	6
COPY		    ENDP

SEARCH		    PROC
                PUSH 	BP
                MOV 	BP, SP
                PUSH 	SI
                PUSH 	DI
                MOV 	SI, [BP+4]
                MOV 	DI, [BP+6]
SEARLP:		    PUSH 	SI
                PUSH 	DI
                CALL 	MATCH
                CMP 	AX, 1
                JZ 		FINDR
                INC 	SI
                MOV 	AL, [SI]
                CMP 	AX, 24H
                JZ 		NOR
                LOOP 	SEARLP
FINDR:		    MOV 	AX, SI
                JMP 	SEARR
NOR:		    MOV 	AX, 0
SEARR:		    POP 	DI
                POP 	SI
                POP 	BP
                RET 	4
SEARCH		    ENDP

CODE1           ENDS
                END     MAIN

运行结果截图:

x86汇编课程总结

x86汇编课程总结

x86汇编课程总结


第四次作业:

1、 n!,n = 5(6、7、8), n=3时  Debug下截屏,说明堆栈内存图

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

DATA1           SEGMENT

DATA1           ENDS

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

GETNUM 		    MACRO
                MOV 	AH, 1
                INT 	21H
                SUB 	AL, 30H
                XOR 	AH, AH
                ENDM

DISPNUM     PROC
            PUSH    BX
            PUSH    CX
            PUSH    DX
            MOV     BX, 10H
            MOV     CX, 4
DISPNUMLP1: XOR     DX, DX
            DIV     BX
            CMP     DL, 10
            JAE     DISPNUMIF
            ADD     DL, 30H
            JMP     DISPNUMCO
DISPNUMIF:  ADD     DL, 37H
DISPNUMCO:  PUSH    DX
            LOOP    DISPNUMLP1

            MOV     CX, 4
DISPNUMLP2: POP     DX
            MOV     AH, 2
            INT     21H
            LOOP    DISPNUMLP2

            POP     DX
            POP     CX
            POP     BX
            RET
DISPNUM     ENDP

JIECHENG        PROC
                PUSH    BP
                MOV     BP, SP
                PUSH    BX
                PUSH    CX
                PUSH    DX

                MOV     BX, [BP+4]
                CMP     BX, 1
                JE      JC1OUT
                MOV     CX, BX
                DEC     CX
                PUSH    CX
                CALL    JIECHENG
                XOR     DX, DX
                MUL     BX
                JMP     JCOUT
JC1OUT:         MOV     AX, 1
JCOUT:

                POP     DX
                POP     CX
                POP     BX
                POP     BP
                RET     2
JIECHENG        ENDP

NEWLINE     MACRO
            PUSH    DX
            PUSH    AX
            MOV     DL, 0AH
            MOV     AH, 02H
            INT     21H
            POP     AX
            POP     DX
            ENDM

MAIN            PROC    FAR
                MOV     AX, STACK1
                MOV     SS, AX
                MOV     AX, STACK_BTM
                MOV     SP, AX
                MOV     AX, DATA1
                MOV     DS, AX
                MOV     ES, AX

                GETNUM
                NEWLINE
                PUSH    AX
                CALL    JIECHENG

                CALL    DISPNUM

EXIT:           MOV     AH, 4CH
                INT     21H
MAIN            ENDP

CODE1           ENDS
                END     MAIN

运行结果截图:

x86汇编课程总结

x86汇编课程总结

2、 /除,??转换综合,堆栈传参数,键盘控制循环

同上次

3、 串操作,要求同上

同上次






相关标签: 课程作业