andyljn 2020-03-27
汇编语言源程序的中的语句分为两大类:指令性语句和指示性语句
指令性就是能够被CPU执行的语句;指示性就是不被CPU执行的指令,不能生成目标代码,又称为伪操作语句或伪指令。
操作数可以是寄存器或存储器或数据段。数据段可以是常量,表达式,变量,标号。
标号代表存放一条指令的存储单元的符号地址,后面必须加冒号。有段值,段偏移量,类型三个属性。
表达式:
1 诸如算术运算符值类的运算:
MOV AL,8+5 等价于MOV AL,13
2 同时还有逻辑运算符,名字和指令的AND,OR,XOR等相同。
MOV AL,0AH AND 0CCH
3 关系运算符EQ NE LT LE GT GE
MOV AX,4 EQ 3 汇编指令为 MOV AX,0
关于伪指令:
1 数据定义的伪指令
常用的指令有DB,DW,DD,DQ,DT,分别代表定义变量为1,2,4,8,10个字节类型。
定义操作书的相关伪代码如下:
DATA DB 11H,33H; 包含两个元素的字节变量DATA
NUM DW 100*5+88
STR DB ‘HELLO
数据定义的操作数 还可以是 ? ,对变量保留相应的存储单元,但不赋予变量的值。小编在写程序的时候 需要加引号。
2 重复操作符 DUP
DATA1 DB 20 DUP(‘?‘) ; 20代表为变量DATA1分配20个字节的存储空间,初值为任意值,或者为 相对应的存储单元本来的值。
关于DOS的调用:
输入单个字符显示:
CODE SEGMENT ASSUME CS:CODE START: MOV AH,1 INT 21H JMP START CODE ENDS END START
显示单个字符:
CODE SEGMENT ASSUME CS:CODE START: MOV DL,‘B‘ MOV AH,2 INT 21H CODE ENDS END START
输入字符串:
DATA SEGMENT STRING DB 10,0,10 DUP(‘?‘) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,STRING MOV AH,0AH INT 21H MOV CL,STRING+1 XOR CH,CH ADD DX,CX MOV BX,DX MOV BYTE PTR[BX+2],‘$‘ MOV AH,4CH INT 21H CODE ENDS END START
显示字符串:
DATA SEGMENT STR DB ‘123ABC‘ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA mov ds,ax lea bx,str MOV CX,6 LPP: MOV AH,2 MOV DL,[BX] INC BX INT 21H LOOP LPP MOV AH,4CH INT 21H CODE ENDS END START