⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sample.asm

📁 使用C++实现的Java语言子集词法、语法、语义分析器
💻 ASM
字号:
.MODEL  SMALL, C
EXTRN   printf:NEAR

STACKSG SEGMENT STACK 'S'
        DW      128 DUP(?)
STACKSG ENDS

DATA    SEGMENT WORD PUBLIC 'WORD'
PRN_STR DB 'Set %s = %d', 13, 10, 0
N_0     DB 'sum', 0
D_0     DW      0
N_1     DB 'temp', 0
D_1     DW      0
N_2     DB 'test$1', 0
D_2     DW      0
DATA    ENDS

DGROUP  GROUP DATA

CODE    SEGMENT WORD PUBLIC 'CODE'
MAIN    PROC    NEAR
        ASSUME  CS:CODE, DS:DGROUP, SS:STACKSG
        ;赋值开始
        ;四则表达式开始
        MOV     SI, 10
        PUSH    SI
        ;四则表达式结束
        POP     AX
        MOV     D_0, AX
        ;调用printf输出开始
        PUSH    AX
        LEA     BX, N_0
        PUSH    BX
        LEA     BX, PRN_STR
        PUSH    BX
        CALL    printf
        ADD     SP, 6
        ;调用printf输出结束
        ;赋值结束
        ;赋值开始
        ;四则表达式开始
        MOV     SI, -6
        PUSH    SI
        ;四则表达式结束
        POP     AX
        MOV     D_1, AX
        ;调用printf输出开始
        PUSH    AX
        LEA     BX, N_1
        PUSH    BX
        LEA     BX, PRN_STR
        PUSH    BX
        CALL    printf
        ADD     SP, 6
        ;调用printf输出结束
        ;赋值结束
WB_0:
        ;比较表达式开始
        MOV     SI, [D_1]
        PUSH    SI
        MOV     SI, [D_0]
        PUSH    SI
        POP     BX
        POP     AX
        CMP     AX, BX
        JNL     WE_0
        ;比较表达式结束
        ;赋值开始
        ;四则表达式开始
        MOV     SI, [D_1]
        PUSH    SI
        MOV     SI, 3
        PUSH    SI
        POP     BX
        POP     AX
        ADD     AX, BX
        PUSH    AX
        ;四则表达式结束
        POP     AX
        MOV     D_1, AX
        ;调用printf输出开始
        PUSH    AX
        LEA     BX, N_1
        PUSH    BX
        LEA     BX, PRN_STR
        PUSH    BX
        CALL    printf
        ADD     SP, 6
        ;调用printf输出结束
        ;赋值结束
        JMP     WB_0
WE_0:
WB_1:
        ;比较表达式开始
        MOV     SI, 200
        PUSH    SI
        MOV     SI, [D_0]
        PUSH    SI
        POP     BX
        POP     AX
        CMP     AX, BX
        JNG     WE_1
        ;比较表达式结束
        ;赋值开始
        ;四则表达式开始
        MOV     SI, [D_0]
        PUSH    SI
        MOV     SI, [D_1]
        PUSH    SI
        MOV     SI, 3
        PUSH    SI
        POP     BX
        POP     AX
        IMUL    BX
        XOR     DX, DX
        PUSH    AX
        POP     BX
        POP     AX
        ADD     AX, BX
        PUSH    AX
        MOV     SI, -7
        PUSH    SI
        POP     BX
        POP     AX
        SUB     AX, BX
        PUSH    AX
        ;四则表达式结束
        POP     AX
        MOV     D_0, AX
        ;调用printf输出开始
        PUSH    AX
        LEA     BX, N_0
        PUSH    BX
        LEA     BX, PRN_STR
        PUSH    BX
        CALL    printf
        ADD     SP, 6
        ;调用printf输出结束
        ;赋值结束
        JMP     WB_1
WE_1:
        ;赋值开始
        ;四则表达式开始
        MOV     SI, [D_0]
        PUSH    SI
        MOV     SI, 5
        PUSH    SI
        POP     BX
        POP     AX
        XOR     DX, DX
        IDIV    BX
        PUSH    AX
        MOV     SI, 5
        PUSH    SI
        MOV     SI, [D_1]
        PUSH    SI
        POP     BX
        POP     AX
        IMUL    BX
        XOR     DX, DX
        PUSH    AX
        POP     BX
        POP     AX
        ADD     AX, BX
        PUSH    AX
        MOV     SI, 8
        PUSH    SI
        POP     BX
        POP     AX
        SUB     AX, BX
        PUSH    AX
        MOV     SI, 6
        PUSH    SI
        POP     BX
        POP     AX
        ADD     AX, BX
        PUSH    AX
        ;四则表达式结束
        POP     AX
        MOV     D_2, AX
        ;调用printf输出开始
        PUSH    AX
        LEA     BX, N_2
        PUSH    BX
        LEA     BX, PRN_STR
        PUSH    BX
        CALL    printf
        ADD     SP, 6
        ;调用printf输出结束
        ;赋值结束
        MOV     AX, 4C00H
        INT     21H
MAIN    ENDP
CODE    ENDS

        END     MAIN

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -