惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
Last Week in AI
Last Week in AI
IT之家
IT之家
A
About on SuperTechFans
M
MIT News - Artificial intelligence
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
博客园 - 【当耐特】
V
Visual Studio Blog
Microsoft Security Blog
Microsoft Security Blog
博客园_首页
aimingoo的专栏
aimingoo的专栏
The Cloudflare Blog
Vercel News
Vercel News
博客园 - Franky
有赞技术团队
有赞技术团队
B
Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
量子位
云风的 BLOG
云风的 BLOG
T
Tailwind CSS Blog

姓王者的博客

Linux用户Secure Boot自主维护指南 | 姓王者的博客 MAD Bugs 已经开始——关于信息安全的军备竞赛 | 姓王者的博客 解决钉钉Dingtalk无法在Linux新版内核上启动问题-修复可执行栈错误 | 姓王者的博客 突发:GitHub 正遭受大规模 Issue 赌博广告轰炸 | 姓王者的博客 Ubuntu26.04-beta体验:坚毅浣熊! | 姓王者的博客 fakeclaw装作龙虾发贴吧 | 姓王者的博客 找回12年前的QQ记忆 | 姓王者的博客 在Linux上玩Flash网页游戏-洛克王国 | 姓王者的博客 Copilot将使用交互数据来训练 | 姓王者的博客 重要通知-请更新我的GPG公钥 | 姓王者的博客 为了自由Android | 姓王者的博客 GPL"2,3"事 | 姓王者的博客 短文-对VitePlus的一点🤏小贡献 | 姓王者的博客 Bing收录没了?亲测有效的快速恢复指南 | 姓王者的博客 解决桌面设备二维码快速识别的工具-ClipQR | 姓王者的博客 解决 Nautilus 自定义终端插件安装依赖问题 | 姓王者的博客 OpenClaw 该熄火了 | 姓王者的博客 Vite8 - 统一的基建开始 | 姓王者的博客 Astro 6 推出啦 | 姓王者的博客 ubuntu的openvpn异常暂停推送更新 | 姓王者的博客 Ubuntu 24.04 安装 Win10 虚拟机 | 姓王者的博客 ESA-后记:热爱阿里云 | 姓王者的博客 Moonbit 0.8.0 重大发布,我也要改一下我的包 | 姓王者的博客 ESA Pages 边缘开发大赛获奖 | 姓王者的博客 Astro: 优化katex,mermaid和灯箱使用 | 姓王者的博客 从edgeone迁移到esa | 姓王者的博客 出租人类:AI时代的荒诞与真实 | 姓王者的博客 Astro 5.17构建性能优化实践:从18s到13s | 姓王者的博客 Moonbit License Checker 开发使用 | 姓王者的博客 Stalux Astro博客主题自荐 | 姓王者的博客
汇编语言程序设计:用vscode配置环境,简单命令 | 姓王者的博客
作者:xingwangzhe · 2025-03-23 · via 姓王者的博客

🕒 阅读时间:2 分钟 📝 字数:674 👀 阅读量: Loading...

试了一下,老师发的那个用起来真不习惯,但老师说可以自行配置编译环境,能跑就行

配置编译环境

所以我想到了vscode,可以在vscode插件列表里找到相关的插件masm-tasm

2025-03-23-164031

要改一下这个插件的设置 2025-03-23-164503 改这两项就行了

简单的命令操作

指令类型指令原始词功能描述
内存操作DDisplay/Dump查看内存内容
内存操作EEdit修改内存内容
反汇编UUnassemble机器码转汇编
执行控制GGo运行程序
执行控制TTrace单步执行程序
寄存器操作RRegister查看或修改寄存器
寄存器原始词描述
AXAccumulator数据存储与运算(累加器)
BXBase数据存储与运算(基址寄存器)
CXCounter数据存储与运算(计数器寄存器)
DXData数据存储与运算(数据寄存器)

内存操作指令

1. 查看内存(D 指令,Dump)

命令行会话​:

; 启动Debug后默认进入提示符

-d 100 ; 输入命令:查看地址100开始的内存

0B8D:0100 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

0B8D:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

说明​:

  • dDump 的缩写
  • 输出格式:段地址:偏移地址 数据(十六进制)- ASCII码表示

2. 修改内存(E 指令,Enter)

命令行会话​:

-e 100 41 42 43 ; 输入命令:向地址100写入A(41)、B(42)、C(43)

-d 100 ; 再次查看验证

0B8D:0100 41 42 43 00 00 00 00 00-00 00 00 00 00 00 00 00 ABC.............

说明​:

  • eEnter 的缩写
  • 可连续输入多个字节(空格分隔)

二、反汇编指令

3. 机器码转汇编(U 指令,Unassemble)

命令行会话​:

-a 100 ; 先用A指令写入汇编代码

0B8D:0100 mov ax, 1234

0B8D:0103 add ax, bx

0B8D:0105 int 21h

-u 100 ; 输入命令:反汇编地址100的代码

0B8D:0100 B83412 MOV AX,1234

0B8D:0103 01D8 ADD AX,BX

0B8D:0105 CD21 INT 21

说明​:

  • uUnassemble 的缩写
  • 反汇编结果显示机器码(十六进制)和对应的汇编指令

三、执行控制指令

4. 运行程序(G 指令,Go)

命令行会话​:

-r ax ; 查看初始AX值

AX=0000

-g=100 105 ; 输入命令:从100运行到105(断点)

AX=1234 ; 运行后AX的值

说明​:

  • gGo 的缩写
  • 格式:g=起始地址 结束地址=可省略

5. 单步执行(T 指令,Trace)

命令行会话​:

-t ; 输入命令:执行当前IP指向的指令

AX=1234 IP=0103 ; 执行完MOV AX,1234后,IP指向下一条指令

-t ; 再次单步执行

AX=1234+BX值 IP=0105 ; 执行ADD AX,BX

说明​:

  • tTrace 的缩写
  • 每执行一条指令,自动显示寄存器变化

四、寄存器操作指令

6. 修改寄存器(R 指令,Register)

命令行会话​:

-r bx ; 输入命令:查看并修改BX寄存器

BX=0000

:1122 ; 输入新值(十六进制)

-r ; 查看所有寄存器

AX=1234 BX=1122 CX=0000 DX=0000 ...

说明​:

  • rRegister 的缩写
  • 直接输入r显示所有寄存器,输入r 寄存器名可修改指定寄存器

五、完整调试流程示例

目标​:计算 1234h + 5678h 并存入 AX ​命令行会话​:

; 1. 写入汇编代码

-a 100

0B8D:0100 mov ax, 1234

0B8D:0103 mov bx, 5678

0B8D:0106 add ax, bx

0B8D:0108 hlt

; 2. 反汇编验证

-u 100

0B8D:0100 B83412 MOV AX,1234

0B8D:0103 BB7856 MOV BX,5678

0B8D:0106 01D8 ADD AX,BX

0B8D:0108 F4 HLT

; 3. 单步执行

-t 4 ; 执行4条指令(含HLT)

AX=68AC ; 结果:1234+5678=68AC

注意​:

  1. 命令行提示符为-(Debug 工具默认)
  2. 十六进制数无需加后缀(默认十六进制)
  3. Enter键执行命令,按Ctrl+C退出 Debug