文章目录
基本指令知识实验一(1/2)开始实验一(1/2)加强实验一(2/2)开始实验一(2/2)加强实验报告
基本指令知识
参照《汇编语言》(by王爽)学习整理。 1.“-R”用于查看当前寄存器中的数据内容。这里只需要掌握AX、BX、CX、DX、CS(程序段寄存器),IP(指令指针寄存器)。 该指令可用于更改寄存器内容. 2.“-D”命令用于查看内存中内容。 格式:-d cs:ip。列出从指定内存单元开始的128个内存单元内容。 3.“-e”命令 (1)-e 起始地址 数据1 数据2 数据3…。更改内存内容 (2)-e 起始地址 。在.后修改内容。 4.“-U”命令 u cs:ip。将起始地址开始的内存单元中的命令翻译成汇编命令 5.“-t”命令 逐条执行命令
实验一(1/2)开始
t指令 注意 (1)t+数值N,连续执行接下来的N条指令。 (2)t=数值,跳转到段内某条指令。 (3)t【=地址】【值】地址:跳转到,值:执行几条指令。 G指令 连续执行:G 开始:结束。 存盘操作提前在f盘中有一个ff.*的文件。 INC指令 :对操作数加一。
实验一(1/2)加强
汇编语言七种寻址方式: 1.立即寻址方式 操作数直接包含在指令中,紧跟在操作码之后的寻址方式称为立即寻址方式,把该操作数称为立即数。 MOV AL, 6 2.寄存器寻址方式 操作数直接包含在寄存器中,由指令指定寄存器号的寻址方式。 MOV BX, AX 3.直接寻址方式 操作数的有效地址直接包含在指令中的寻址方式。有效地址存放在代码段的指令操作码之后,但操作数本身在存储器中,所以必须先求出操作数的物理地址。这种寻址方式常用于存取简单变量。 MOV AL, [78H] 4.相对寻址 目标地址=PC当前值+跳转指令字节数+rel,仅在转移指令中使用 5.变址寻址 以DPTR或PC作为基址,累加器A为变址,并将两者内容相加形成的16位地址作为操作数地址 MOVC A, @A+DPTR ;执行后(A)=((A)+(DPTR)) 6.位寻址 操作数是内部RAM 20H2FH单元中的位(007FH)或者SFR中具有位地址的某一位 MOV C, 20H ;将20H位的值传送给进位位CY,20H为位地址 7.寄存器间接寻址 以寄存器中的内容为地址,以该地址中的内容为操作数。MCS-51规定R0或R1为间接寻址寄存器 MOV A, @R0 ;执行后A=((R0))
不能用立即数进行寄存器寻址。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200515000943903.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzYxNTE5Mg==,size_16,color_FFFFFF,t_70)
实验一(2/2)开始
知识点: (1)ds段指针寄存器,不能有mov直接赋值。需要某个寄存器做中转。 (2)ss,sp是栈顶指针寄存器。前者是段寄存器,后者是段内段指针寄存器。ss不可直接赋值,需要中转。sp则不需要。 (3)pop:ip=ip+2;push:ip=ip-2;栈顶地址小。栈底地址大。 (4)8086CPU没有栈越界的检查。 (5)push、pop指令的使用如下: (6)push、pop出栈入栈顺序: (7)sp起始位置: (8)数据段、代码段、栈段寄存器使用: (9)修改ss指令执行后,其后的修改sp指令紧接着执行。无需“-t”命令。 (10)写第一个汇编程序: 伪指令: 汇编语言程序中有两种指令:汇编指令、伪指令。汇编指令有对应机器码,可以被编译成机器码。伪指令不会被编译成机器指令,不会被CPU执行。伪指令由编译器执行。 三种伪指令: 1. XXX segment …XXX ends:必须用到,用于定义一个段。 2. end:汇编程序结束的标记。不要与上一点的ends混淆。 3. assume:含义是假设。假设某一段寄存器和某一用segment…ends定义的段相关联。例:assume cs:codesg。将cs段寄存器和名为codesg的段相关联。
汇编语言程序结构: 假设>>>程序段>>>汇编程序结束 程序返回: 实验正文: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200518221220569.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzYxNTE5Mg==,size_16,color_FFFFFF,t_70)
DATA SEGMENT
DD1 DB 35H,78H,85H
DD2 DB ?
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
START:PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AL,DD1
CMP AL,DD1+1
JA AAA1
MOV AL,DD1+1
AAA1:CMP AL,DD1+2
JA AAA2
MOV AL,DD1+2
AAA2:MOV DD2,AL
RET
MAIN ENDP
CODE ENDS
END START
步骤:
MASM TEST.ASMLINK TEST.OBJTEST
实验一(2/2)加强
待更新
实验报告
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200514234353686.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzYxNTE5Mg==,size_16,color_FFFFFF,t_70)
|