学习来源:b站各种学习资料
前置知识:计算机组成原理等知识
学习参考的资源
链接: https://pan.baidu.com/s/1tg_ZW7VD3TS_s1v_EjS89w?pwd=ak6t 提取码: ak6t
环境配置
编程环境:vscode 拓展插件选择MASM/TASM即可
环境运行
具体的运行后的参数
-t是单步运行 会显示执行一次以后 各个寄存器的内容以及下一条指令的信息
-R是显示所有寄存器的内容,但是不会运行
-G是一步到位执行完,直接看最终的结果
一般的通用寄存器都是可以存一个W的内容,也就是一个字,一般为2B
DB表示define binary定义一个字节
DW为定义一个字 一般为两个字节1234H这种
基础指令
合法的MOV指令
MOV AX,Y 1.内存到寄存器
MOV Y,AX 2.寄存器到内存
MOV AX,BX 3.寄存器到寄存器
......
程序默认的终止指令
ADD AX,X //其第一个一般为目的操作数 也就是运算的和的结果依然存回AX中
SUB AX,X //AX=AX-X 第一个数依然为目的操作数
INC AX //表示AX++ 自增运算指令
DEC AX //自减指令 表示AX--
NEG AX //取反指令 取负数的意思
寄存器的使用
常见的寄存器(一般都是可以存一个字的内容)
在计算机中,我们不能直接对内存中的数据进行编辑,需要先将数据通过MOV指令移动到相应的寄存器中再进行处理。
8086CPU中有14个16位的寄存器。例如1234H 但是由于小端存储(计算机组成原理),所以会写成3412H,也就是按字节编址的情况下的两个地址空间(一个字的长度)。因为通用寄存器为16bit的长度,所以一般可以拆成两个寄存器来使用,分别使用其8bit的内容,如AX可以拆分成AH和AL两个寄存器使用。(辅助记忆,AH为A寄存器的high的部分,也就是高位。AL可以理解为A的low低位的寄存器部分)
基地址存储器所使用到的段,非常类似于计组/操作系统中的分段存储(高度相似)
换而言之,只写[BX]就是获取其数据段的内容,也就是默认为DS:[BX] 如果有需要也可以写成CS:[BX]或者SS:[BX]两种
其中SP指针就是我们在计算机组成原理中所会学到的堆栈寻址相关的指针。
练习题
代码:
DATA SEGMENT ;数据段
X DW 1234H
Y DW 2345H
Z DW ?
DATA ENDS
STACK SEGMENT ;堆栈段
STACK ENDS
CODE SEGMENT ;代码段
ASSUME DS:DATA,SS:STACK,CS:CODE ;声明对应的关系
MAIN: ;程序起始的别名 随便叫什么
MOV AX,DATA
MOV DS,AX ;第一步的初始化就完毕了
MOV AX,X
ADD AX,Y
MOV Z,AX
;程序结束的标志
MOV AH,4CH
INT 21H
CODE ENDS
END MAIN
通过-G使其执行完毕 通过-R查看所有寄存器的数值内容
通过-D我们可以指定内存单元进行查看 然后从下一条指令的起始地址开始作为偏移量查看内容,由上图可知下一条指定的地址是076C,所以我们输入 -D 076C:0000H即可
根据小端存储的原理,可知34 12是x的内容,45 23是Y的内容,所以79 35是Z的内容,从人类的视角看,运算结果是3579H,符合1234H+2345H=3579H这样一个运算