汇编语言代码回顾

程序1:

CODE SEGMENT      ;段定义伪指令
ASSUME CS:CODE    ;段约定伪指令
START:MOV DL,1    ;数据传送指令,源操作数立即寻址,目的操作数寄存器寻址,不影响6个状态标志
    ADD DL,2      ;二进制数加法指令,源操作数立即寻址,目的操作数寄存器寻址,影响6个状态标志
    ADD DL,30H    ;二进制数加法指令,源操作数立即寻址,目的操作数寄存器寻址,影响6个状态标志
    MOV AH,02H    ;DOS功能调用,02H显示一个字符,入口参数DL=待显示字符的ASCII码(该操作会影响AL中的内容)
    INT 21H       ;DOS功能调用中使用此指令执行功能调用
    MOV AH,4CH    ;DOS功能调用,结束正在运行的程序,并返回DOS系统
    INT 21H       ;DOS功能调用中使用此指令执行功能调用
CODE ENDS
END START         ;汇编结束伪指令

程序2:

立即寻址:(源操作数都是立即寻址)
    MOV AL,11100101B
    MOV BX,1234H
    MOV CX,0A234H
    MOV AH,-2            ;存入后,编译为补码
    MOV BL,'A'           ;编译后,BL=41H
    MOV AX,11*12
寄存器寻址:(目的操作数为寄存器寻址)
    MOV EAX,12345678H
    MOV CH,CL
    INC SI
直接寻址:
    MOV AL,DS:[45H]      ;源操作数为直接寻址,目标操作数为寄存器寻址
    MOV AX,ES:[1000H]    ;源操作数为直接寻址,目标操作数为寄存器寻址
    MOV AX,DS:BUF        ;源操作数为直接寻址,目标操作数为寄存器寻址,BUF为变量名
    MOV AX,BUF           ;源操作数为直接寻址,目标操作数为寄存器寻址,BUF为变量名
寄存器间接寻址:
    MOV AH,DS:[BX/SI/DI] ;源操作数为寄存器间接寻址,目标操作数为寄存器寻址,“DS:“可省略
    MOV AH,SS:[BP]       ;源操作数为寄存器间接寻址,目标操作数为寄存器寻址,“SS:“可省略
基址寻址:
    MOV AH,DS:[BX/BP+3] ;源操作数为基址寻址,目标操作数为寄存器寻址,“DS:“可省略
变址寻址:
    MOV AH,SS:[SI/DI+3] ;源操作数为变址寻址,目标操作数为寄存器寻址
基址加变址寻址:
    MOV AH,[BX/BP+SI/DI+1]  ;源操作数为基址加变址寻址,目标操作数为寄存器寻址。若默认的段寄存器不一致,虽然组合在语法上是合法的,但易出错

程序3:

关系运算符:
    EQ(相等)、NE(不等)、GT(大于)、LT(小于)、GE(大于等于)、LE(小于等于)
数据回送运算符:
(1)
    MOV AX,SEG DATA ;SEG DATA返回DATA的段基址,因此源操作数为立即寻址,由于逻辑段段名本身就蕴含了段基址信息,所以SEG可以省略
    MOV DS,AX
(2)
    BUF DB 10H,20H,30H
    MOV BX,OFFSET BUF    ;OFFSEG BUF返回BUF的偏移地址,源操作数为立即寻址
    MOV AH,[BX+1]        ;执行完毕后,(AH)=20H,源操作数为间接寻址
(3)
    BUF DW 20DUP(?)
    MOV AH,SIZE BUF      ;返回BUF所占字节数,因为使用DW双字定义,因此(AH)=40H
(4)
    BUF DB 'HELLO,NJUPT'
    COUNT EQU $-BUF      ;$返回当前汇编地址计数器的值,此处COUNT为11
    

程序4:

PTR运算符:修改存储器操作数,使源目操作数类型一致
    NUM DB,10H,20H,30H
    MOV NUM,1234H 改为:MOV WORD PTR NUM,1234H ;目标操作数为存储器操作数,因此需要指定类型
 
    NUMX DB 0FFH,00H
    INC NUMX          ;立即寻址,不用指定
    使用原则:
        双操作数 1.源目操作数不可同时为内存操作数;2.源目操作数必须长度一致 3.目的操作数为变址、间址、基址、基址加变址的内存操作数,而源操作数为单/双字节立即数,则必须使用PTR说明类型
        单操作数:若操作数为间址寻址、变址寻址、基址寻址、基址加变址寻址方式,则必须说明类型

符号定义伪指令:
    COUNT EQU 40H
    MOV CX,COUNT      ;一旦使用EQU传值后,COUNT的值不可再改变

    COUNT=40H
    MOV CX,COUNT
    COUNT=30H         ;COUNT的值可以再次定义

交换指令
    XCHG AX,[BX]      ;将间址寻址[BX]和寄存器寻址AX中的数据进行互换

程序5:

程序6:

程序7:

程序8:

程序9:

程序10:

程序11:

程序12:

程序13:

程序14:

;加法程序实现46H+52H,并将运算结果放入数据段变量SUM中
    .586                  ;处理器选择伪指令
DATA    SEGMENT USE16     ;段定义伪指令
SUM     DB ?
DATA    ENDS
CODE    SEGMENT USE16
        ASSUME CS:CODE,DS:DATA;段约定伪指令
BEG:    MOV    AX,DATA
        MOV    DS,AX
        MOV    AL,46H
        ADD    AL,52H
        MOV    SUM,AL
        MOV    AH,4CH     ;DOS功能调用,结束正在运行的程序,并返回DOS操作系统 
        INT    21H        ;执行功能调用
CODE    ENDS
        END    CODE

程序15:

;可执行文件为.COM格式的条件为:
;1.源程序只使用一个逻辑段
;2.代码段目标块小于64KB
;3.启动指令放于离代码段偏移100H的单元,可以使用ORG 100H进行指定初始位置。
    .586
CODE    SEGMENT    USE16
        ASSUME    CS:CODE
        ORG    100H
BEG:    JMP    START
        SUM    DB ?
START:  MOV    AL,46H
        ADD    AL,52H
        MOV    SUM,AL
        MOV    AH,4CH
        INT    21H
        CODE    ENDS
        END    BEG

程序16:

;询问用户姓名并等待用户输入,用户输入姓名后按回车键,程序再把输入的姓名复制显示在屏幕上
    .586
DATA    SEGMENT    USE16
MESG    DB    "What is your name?"
BUF     DB    30
        DB    ?
        DB    30 DUP(?) 
DATA    ENDS
CODE    SEGEMENT    USE16
        ASSUME    CS:CODE,DS:DATA
BEG:    MOV    AX,DATA
        MOV    DS,AX
AGAIN:  MOV    AH,9
        MOV    DS,OFFSET MESG
        INT    21H
        MOV    AH,0AH
        MOV    DX,OFFSET BUF
        INT    21H
        MOV    AH,2
        MOV    DL,0AH
        INT    21H
        MOV    BL,BUF+1
        MOV    BH,0
        MOV    SI,OFFSET BUF+2
        MOV    BYTE PTR [BX+SI],'$'
        MOV    AH,9
        MOV    DX,OFFSET BUF+2
        INT    21H
        MOV    AH,4CH
        INT    21H
CODE    ENDS
        END    BEG
        

程序17:

;在屏幕左上角显示黑底灰白字符串‘HELLO’,并在屏幕中央显示红底白字字符串‘WELCOME’
    .586
DATA    SEGMENT    USE16
MESG1   DB    'HELLO$'
MESG2   DB    'WELCOME'
LL      EQU   $-MESG2
DATA    ENDS
CODE    SEGMENT    USE16
        ASSUME    CS:CODE,DS:DATA
BEG:    MOV    AX,DATA
        MOV    DS,AX
        MOV    ES,AX
        MOV    AX,0003H        ;AH=00H,AL=03H,即设为80*25彩色
        INT    10H             ;BIOS输出功能的调用
        MOV    AH,9
        MOV    DX,OFFSET MESG1 ;显示黑底白字字符串“HELLO”
        INT    21H
        MOV    AX,1301H
        MOV    BH,0
        MOV    BL,01001111B
        MOV    CX,LL
        MOV    DH,12
        MOV    DL,(80-LL)/2
        MOV    BP,OFFSET MESG2
        INT    10H
        MOV    AH,4CH
        INT    21H
CODE    ENDS
        END    BEG

程序18:

;比较变量A1和A2两个有符号数的大小,并将其中较大的数寄放在AL中
    .586
DATA    SEGMENT    USE16
A1    DB    -12
A2    DB    -80
DATA    ENDS
CODE    SEGMENT    USE16
        ASSUME    DS:DATA,CS:CODE
BEG:    MOV    AX,DATA
        MOV    DS,AX
        MOV    AL,A1
        CMP    AL,A2
        JGE    NEXT
        MOV    AL,A2
NEXT:   MOV    AH,4CH
        INT    21H
CODE    ENDS
        END    BEG

程序19:

;某科室9人,统计月收入在2000~4000间的人数,并用十进制显示统计结果
    ,586
DATA    SEGMENT    USE16
NUM    DW    1000,2222,3333,4444,2344,5667,2332,1999,4567
DATA    ENDS
CODE    SEGMENT    USE16
        ASSUME    CS:CODE,DS:DATA
BEG:    MOV    AX,DATA
        MOV    DS,AX
        MOV    BX,OFFSET NUM
        MOV    CX,9
        MOV    DL,0
LAST:   CMP    WORD PTR [BX],2000
        JC    NEXT
        CMP    WORD PTR [BX],4000
        JA    NEXT
        INC    DL
NEXT:   INC    BX
        INC    BX
        LOOP    LAST
        ADD    DL,30H
        MOV    AH,2
        INT    21H
        MOV    AH,4CH
        INT    21H
CODE    ENDS
        END    BEG

程序20:

;计算1+2+……+100,并将结果存入字变量SUM中
    .586
DATA    SEGMENT    USE16
SUM    DW    ?
DATA    ENDS
CODE    SEGMENT    USE16
        ASSUME    CS:CODE,DS:DATA
BEG:    MOV    AX,DATA
        MOV    DS,AX
        MOV    CX,100
        MOV    AX,0
AGA:    ADD    AX,CX
        LOOP   AGA
        MOV    SUM,AX
        MOV    AH,4CH
        INT    21H
CODE    ENDS
        END    BEG

程序21

;将字符串STRING中的所有大写字母转换为小写字母,并设该字符串以0结尾
    .586
DATA    SEGMENT    USE16
STRING    DB    'I AM A STUDENT',0
DATA    ENDS
CODE    SEGMENT    USE16
        ASSUME    CS:CODE,DS:DATA
BEG:    MOV    AX,DATA
        MOV    DS,AX
        MOV    BX,OFFSET STRING
LAST:   MOV    AL,[BX]
        CMP    AL,0
        JZ     EXIT
        CMP    AL,'A'
        JC     NEXT
        CMP    AL,'Z'
        JA     NEXT
        OR     AL,20H
        MOV    [BX],AL
NET:    INC    BX
        JMP    LAST
EXIT:   MOV    AH,4CH
        INT    21H
CODE    ENDS
        END    BEG

程序22:寄存器传递参数

;设ARRAY是5个字元素的数组,用子程序计算数组元素的累加和,不记进位,并将结果存入变量RESULT中
    .585
DATA    SEGMENT    USE16
ARRAY    DW    11111H,22222H,33333H,44444H,55555H
RESULT    DW    ?
DATA    ENDS
CODE    SEGMENT    USE16
        ASSUME    CS:CODE,DS:DATA
BEG:    MOV    AX,DATA
        MOV    DS,AX
        MOV    CX,5
        MOV    BX,OFFSET ARRAY
        CALL   COMPUTE
XYZ:    MOV    RESULT,AX
EXIT:   MOV    AH,4CH
        INT    21H
COMUPTE PROC    
        MOV    AX,0
AGA:    ADD    AX,[BX]
        ADD    BX,2
        LOOP   AGA
        RET
COMUPTE ENDP
CODE    ENDS
        END    BEG

程序23:新的代码结构实现上程序,内存单元传递参数

    .585
DATA    SEGMENT    USE16
ARRAY    DW    11111H,22222H,33333H,44444H,55555H
RESULT    DW    ?
DATA    ENDS
CODE    SEGMENT    USE16
        ASSUME    CS:CODE,DS:DATA
BEG:    MOV    AX,DATA
        MOV    DS,AX
        CALL   COMPUTE
EXIT:   MOV    AH,4CH
        INT    21H
COMUPTE PROC
        PUSH    AX
        PUSH    BX
        PUSH    CX    
        MOV    AX,0
        MOV    BX,OFFSET ARRAY
        MOV    CX,5
AGA:    ADD    AX,[BX]
        ADD    BX,2
        LOOP   AGA
        MOV    RESULT,AX
        POP    CX
        POP    BX
        POP    AX
        RET
COMUPTE ENDP
CODE    ENDS
        END    BEG

程序24:新的代码结构实现上程序,堆栈传递参数

    .585
DATA    SEGMENT    USE16
ARRAY    DW    11111H,22222H,33333H,44444H,55555H
RESULT    DW    ?
DATA    ENDS
CODE    SEGMENT    USE16
        ASSUME    CS:CODE,DS:DATA
BEG:    MOV    AX,DATA
        MOV    DS,AX
        MOV    CX,5
        PUSH   CX
        MOV    BX,OFFSET ARRAY
        PUSH   BX
        CALL   COMPUTE
        ADD    SP,4
        MOV    RESULT,AX
EXIT:   MOV    AH,4CH
        INT    21H
COMUPTE PROC
        PUSH    BP
        MOV    BP,SP
        PUSH    BX
        PUSH    CX    
        MOV    AX,0
        MOV    BX,[BP+4]
        MOV    CX,[BP+6]
AGA:    ADD    AX,[BX]
        ADD    BX,2
        LOOP   AGA
        POP    CX
        POP    BX
        POP    BP
        RET
COMUPTE ENDP
CODE    ENDS
        END    BEG

程序25:用宏指令实现显示彩色字符串

    .586
DISP1    MACRO    VAR
        MOV    AH,9
        MOV    DX,OFFSET VAR
        INT    21H
        ENDM
DISP2    MACRO    Y,X,VAR,LENGTH,COLOR
        MOV    AH,13H
        MOV    AL,1
        MOV    BH,0
        MOV    BL,COLOR
        MOV    CX,LENGTH
        MOV    DH,Y
        MOV    DL,X
        MOV    BP,OFFSET VAR
        INT    10H
DATA    SEGMENT    USE16
MESG1    DB    'HELLO$'
MESG2    DB    'WELCOME'
LL      EQU    $-MESG2
DATA    ENDS
CODE    SEGMENT    USE16
        ASSUME    CS:CODE,DS:DATA
BEG:    MOV    AX,DATA
        MOV    DS,AX
        MOV    AX,0003H
        INT    10H
        DISO1    MESG1
        DISP2    12,(80-LL)/2,MESG2,LL,01001111B
        MOV    AH,4CH
        INT    21H
CODE    ENDS
        END    BEG

程序26:LOCAL伪指令的应用

    .586
ABS    MACRO    VAR
        LOCAL    NEXT
        CMP    VAR,0
        JGE    NEXT
        NEG    VAR
NEXT:   ENDM
DATA    SEGMENT    USE16
NUM    DB    -1
DATA    ENDS
CODE    SEGMENT    USE16
        ASSUME    CS:CODE,DS:DATA
BEG:    MOV    AX,DATA
        MOV    DS,AX
        MOV    BX,-1030
        ABS    BX
        ABS    NUM
        MOV    AH,4CH
        INT    21H
CODE    ENDS
        END    BEG

程序27~30,见https://blog.csdn.net/qq_37865996/article/details/84190778最后一部分

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方隐侠-千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值