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

本文介绍了在学习微机原理与接口技术时遇到的8086汇编语言环境配置问题,从尝试使用Visual Studio到最后采用学校推荐的Masm集成开发环境。通过代码示例展示了不同寻址方式,并分享了如何在DOS环境下使用DEBUG进行程序调试,包括常用调试指令。文章还探讨了寄存器相对寻址的细节,并提供了调试过程中的观察和记录要点。
摘要由CSDN通过智能技术生成

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

1.弯路

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

本地windows调试器,启动!
在这里插入图片描述
在这里插入图片描述
折腾了一下午,原因找到了:8086微机使用的16位系统,而VS环境是32位的,一个32位的数据传给一个应该是16位的数据,当然符号类型冲突。

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

2.推荐的MASM

使用DOS系统也不尽人意,改用学校推荐的Masm集成开发环境,360软件管家即可下载:
在这里插入图片描述
下载安装敲代码一气呵成:

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语言里支持汇编语言高亮的代码块?求教

先点红框里的运行
在这里插入图片描述
在这里插入图片描述
果然剽现成的代码就是爽
程序字体模糊和字体过小等问题,可以看我的Windows小技巧专栏里的相关文章。

3.调试

接着拿学校给的东西做,点击红框里的调试,进入调试模式。输入-r 不区分大小写,可以看到所有寄存器的值。
在这里插入图片描述
常用汇编调试指令如下表:

命令名格式功能
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寄存器……

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值