欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

微机原理8086汇编语言上机——Masm环境搭建与常用汇编调试指令

程序员文章站 2022-07-03 14:16:09
...

学校的微机原理与接口技术课,最近开始 考古 上机实验了。

1.弯路

为什么不用宇宙最强大的IDEL——Visual Studio呢?
在我的Visual Studio专栏中有一篇文章介绍Visual Studio搭建汇编语言环境并使用AsmDude插件实现代码高亮。

本地windows调试器,启动!
微机原理8086汇编语言上机——Masm环境搭建与常用汇编调试指令
微机原理8086汇编语言上机——Masm环境搭建与常用汇编调试指令
折腾了一下午,原因找到了:8086微机使用的16位系统,而VS环境是32位的,一个32位的数据传给一个应该是16位的数据,当然符号类型冲突。

放弃了Visual Studio。也许有人会解决这个问题?

2.推荐的MASM

使用DOS系统也不尽人意,改用学校推荐的Masm集成开发环境,360软件管家即可下载:
微机原理8086汇编语言上机——Masm环境搭建与常用汇编调试指令
下载安装敲代码一气呵成:

STACK SEGMENT STACK
      DB 0B0H,0B1H,0B2H,0B3H,0B4H,0B5H,0B6H,0B7H
      DB 0B8H,0B9H
      DB 0BAH,0BBH,0BCH,0BDH,0BEH,0BFH
      DB 10H DUP(00)
STACK ENDS
DATA1 SEGMENT
      DB 0A0H,0A1H,0A2H,0A3H
TABLE DW 0A5A4H
      DB 0A6H,0A7H,0A8H,0A9H,0AAH,0ABH
      DB 0ACH,0ADH,0AEH,0AFH
DATA1 ENDS
DATA2 SEGMENT
      DB 0C0H,0C1H,0C2H,0C3H,0C4H,0C5H,0C6H,0C7H
      DB 0C8H,0C9H,0CAH,0CBH,0CCH,0CDH,0CEH,0CFH
DATA2 ENDS
CODE  SEGMENT
      ASSUME CS:CODE,DS:DATA1,ES:DATA2,SS:STACK
START:MOV AX,DATA1
      MOV DS,AX
      MOV AX,DATA2
      MOV ES,AX
      MOV AX,STACK
      MOV SS,AX
      MOV BX,0004H
      MOV CX,0005H
      MOV BP,0003H
      MOV SI,0002H
      MOV DI,0001H
      MOV AX,CX            ;寄存器寻址,0005H
      MOV AX,500H          ;立即寻址,500H
      MOV AX,TABLE         ;直接寻址,DS:0004H, 0A5A4H 
      MOV AX,ES:[BX]       ;寄存器间接寻址,ES:0004H, 0C5C4H
      MOV AX,[BX+05H]      ;寄存器相对寻址,DS:0009H, 0AAA9H
      MOV AX,SS:[BX]+03H   ;寄存器相对寻址,SS:0007H, 0B8B7H
      MOV AX,TABLE[BX]     ;寄存器相对寻址,DS:0008H, 0A9A8H
      MOV AX,07H[BX]   	   ;寄存器相对寻址,DS:000BH, 0ACABH    
      MOV AX,[BP]          ;寄存器相对寻址,SS:0003H, 0B4B3H 
      MOV AX,TABLE[BP]     ;寄存器相对寻址,DS:0007H, 0A8A7H 
      MOV AX,08H[BP]       ;寄存器相对寻址,SS:000BH, 0BCBBH
      MOV AX,[BP+06H]      ;寄存器相对寻址,SS:0009H, 0BAB9H
      MOV AX,DS:[BP+03H]   ;寄存器相对寻址,DS:0006H, 0A7A6H
      MOV AX,[BP]+05H      ;寄存器相对寻址,SS:0008H, 0B9B8H
      MOV AX,ES:[SI+03H]   ;寄存器相对寻址,ES:0005H, 0C6C5H
      MOV AX,[DI+06H]      ;寄存器相对寻址,DS:0007H, 0A8A7H
      MOV AX,[DI]+05H      ;寄存器相对寻址,DS:0006H, 0A7A6H
      MOV AX,TABLE[SI]     ;寄存器相对寻址,DS:0006H, 0A7A6H
      MOV AX,[SI]          ;寄存器间接寻址,DS:0002H, 0A3A2H
      MOV AX,TABLE[DI]     ;寄存器相对寻址,DS:0005H, 0A6A5H
      MOV AX,[SI]+05H      ;寄存器相对寻址,DS:0007H, 0A8A7H
      MOV AX,[BX][DI+01H]  ;基址变址且相对寻址,DS:0006H, 0A7A6H
      MOV AX,[BX][SI]+03H  ;基址变址且相对寻址,DS:0009H, 0AAA9H
      MOV AX,TABLE[BX][SI] ;基址变址且相对寻址,DS:000AH, 0ABAAH
      MOV AX,ES:[BX][DI]   ;基址变址寻址,ES:0005H, 0C6C5H
      MOV AX,[BP][DI+02H]  ;基址变址且相对寻址,SS:0006H, 0B7B6H
      MOV AX,TABLE[BP][DI] ;基址变址且相对寻址,DS:0008H, 0A9A8H
      MOV AX,ES:[BP][DI]   ;基址变址寻址,ES:0006H, 0C5C4H
      MOV AX,[BP][SI+05H]  ;基址变址且相对寻址,SS:000AH, 0BBBAH
      MOV AX,03H[BP][DI]   ;基址变址且相对寻址,SS:0007H, 0B7B6H
      MOV AX,[BP][SI]      ;基址变址寻址,SS:0005H, 0B6B5H
      MOV AX,[BP+02H][DI+03H] ;基址变址且相对寻址,SS:0009H, 0BAB9H
      MOV AX,TABLE[BP+02H][DI+03H];基址变址且相对寻址,DS:000DH, 0AEADH
      MOV AH,4CH
      INT 21H
CODE  ENDS
      END START

我怎么没找到markdown语言里支持汇编语言高亮的代码块?求教

先点红框里的运行
微机原理8086汇编语言上机——Masm环境搭建与常用汇编调试指令
微机原理8086汇编语言上机——Masm环境搭建与常用汇编调试指令
果然剽现成的代码就是爽
程序字体模糊和字体过小等问题,可以看我的Windows小技巧专栏里的相关文章。

3.调试

接着拿学校给的东西做,点击红框里的调试,进入调试模式。输入-r 不区分大小写,可以看到所有寄存器的值。
微机原理8086汇编语言上机——Masm环境搭建与常用汇编调试指令
常用汇编调试指令如下表:

命令名 格式 功能
R 格式1:R
格式2:R 寄存器名
显示修改寄存器的内容
U 格式1:U [地址]
格式2:U 地址范围
从指定地址开始反汇编
D 格式1:D[地址]
格式2:D 地址范围
显示地址范围内的内存单元内容
E 格式:E 地址 [数据]
把给定的数据送到指定地址开始连续的内存单元中
T 格式: T [=地址][x] 从指定的地址开始跟踪x条指令
N 格式: N [磁盘][路径]文件名 在指定的盘,路径下建立文件
G 格式: G [=地址][断点] 从指定地址开始执行程序,到断点处停下来
W 格式: W [地址] 从地址开始的内存块写文件
L 格式: L [地址] 将N命令指定的文件调入指定的内存地址
A 格式: A [地址] 从指定地址开始,对输出的语句汇编到内存
P 格式: P [=地址][x] 执行一个循环直到中断,x代表执行循环的次数
Q 格式: Q 结束并退出DEBUG程序
I 格式: I 端口地址 从指定的端口地址读一个字节,并显示出来
O 格式: O 端口地址 值 将值送到指定端口

实际我们只用到了-T指令,一直-T,看寄存器的值并记录……

今天的重点:MOV AX, [BP] 是寄存器相对寻址,原因是书上的寄存器直接寻址里没有BP寄存器……

资料源自学校微机课程教研组,如有侵权请联系删除。

相关标签: 微机原理 其他