汇编二(入门例子)

1: 字符输出

 LDA AX,BUffer: 将buffer地址的连带偏移地址加入到AX寄存器中 , 8086 8088为16进制的寄存器,20位物理地址

MOV AX,BUffer; 同理,但是将buffer的16位地址装入AX寄存器中

DATAS SEGMENT
     STRS  DB  'Hello World!',13,10,'$'
     ;定义了一个字符串,标号是STRING,其值是字符串首字符的地址。
     ;DB表示的是字符串中每个字符的都是一个字节,每往后加1的时候,地址偏移量加1.
     ;13 CR 回车
     ;10 LF 换行
     ;$作为字符串的结束符 不结束将会输出乱码
DATAS ENDS

STACKS SEGMENT stack

STACKS ENDS

ASSUME CS:CODE,DS:DATAS,SS:STACKS
CODE SEGMENT
main:
    MOV AX,DATAS ; 初始化代码
    MOV DS,AX; 初始化代码
    LEA  DX,STRS; 将偏移地址STRS装入数据寄存器
    MOV AH,9 ;9 为输出代码
    INT 21H ; 执行中断
    MOV AH,4CH
    INT 21H;
CODE ENDS

end main

 2:顺序控制

顺序控制是构成程序的核心条件之一,这里尤为主要的说明一下:

Z=((3X+Y-5)/2其中X=15HY=10H

DATAS SEGMENT
    ;定义Z=((3X+Y-5)/2其中X=15H Y=10H
    X DW 15H
    Y DW 10H
    Z DW ?
DATAS ENDS
ASSUME CS:CODE,DS:DATAS
CODE SEGMENT
main:
    MOV AX,DATAS ; 初始化代码
    MOV DS,AX; 初始化代码
    MOV AX,X
    SHL AX,1
    ADD AX,X
    ADD AX,Y
    SUB AX,5
    SAR AX,1
    MOV Z,AX
    LEA DX,Z
    MOV AH,02H ; 显示输出
    INT 21H
    MOV AH,4CH
    INT 21H;
CODE ENDS

end main

3: 基本流程控制

需要了解psw状态寄存器的各项代表的意思,这里只需要关注 ZF 零位标志位

 

 这里 X为2;

DATAS SEGMENT
    ;定义X=2
    X DB 2
    Y DB ?
DATAS ENDS
ASSUME CS:CODE,DS:DATAS
CODE SEGMENT
main:
    MOV AX,DATAS ; 初始化代码
    MOV DS,AX; 初始化代码
    CMP X,0
    JGE lable1 ; >=0
    MOV Y,-1
    JMP next
    lable1:
    JZ lable2; =0
    MOV Y,1;
    JMP next
    lable2:
    MOV Y,0 
    next:
    MOV AX,0
    MOV AH,4CH
    INT 21H;
CODE ENDS

end main

猜你喜欢

转载自www.cnblogs.com/dgwblog/p/11787206.html