【8086汇编】第一个程序

目录

  • [1. 前置知识](#1. 前置知识)
    • [1.1 环境配置及调试运行(以vscode为例)](#1.1 环境配置及调试运行(以vscode为例))
    • [1.2 debug如何调试](#1.2 debug如何调试)
  • [2. 源程序到可执行程序](#2. 源程序到可执行程序)
    • [2.1 源程序](#2.1 源程序)
    • [2.2 编译链接图解](#2.2 编译链接图解)
    • [2.3 程序的基本框架](#2.3 程序的基本框架)
    • [2.4 程序编译](#2.4 程序编译)
  • [3. BX寄存器](#3. BX寄存器)
  • [4. loop循环指令](#4. loop循环指令)

1. 前置知识

汇编语言的文件后缀名是.asm

1.1 环境配置及调试运行(以vscode为例)

  1. 下载vscode软件
  2. 下载插件
  3. 配置插件

    下载好后,启用MASM/TASM扩展,点击它右下角的设置--->扩展设置--->选择MASM--->(DOS模拟器建议dosbox)

  4. 新建文件,后缀名为.asm,编写代码。
  5. 运行:右击鼠标,选择运行
  6. 调试:右击鼠标,选择"调试当前程序",会弹出一个黑框框,在里面调试即可

1.2 debug如何调试

命令:

p:程序正常结束

q:退出调试

exit:退出debug界面

2. 源程序到可执行程序

步骤:

(1)源程序编辑 文本编辑器 汇编语言源文件.asm文件

(2)源程序汇编 masm.exe或ml.exe 目标文件.obj文件

(3)目标文件链接 link.exe .exe

(4)可执行文件调试 debug.exe .exe

历程:

2.1 源程序

简单程序说明:

  1. 伪指令(格式)

    xxx segment end

    xxx ends

    assume

  2. 指令 (代码段)

  3. 标号(可自定义)

    codesg

伪指令



end

assume

标号

结束

2.2 编译链接图解

2.3 程序的基本框架

框架:各种段构成,存放数据、代码、栈空间等等

如:编程运算2^3

  1. 定义一个段,名称为abs

    asm 复制代码
    abc segment   ;定义一个段,名称为abs
    ......
    abc ends
  2. 在这个段中写入汇编命令,来实现任务

    asm 复制代码
    abc segment
    	mov ax, 2   ;写入汇编命令
    	add ax, ax
    	add ax, ax
    
    	mov ax, 4c00H
    	int 21H
    abc ends
  3. 指出程序在何处结束

    asm 复制代码
    abc segment
    	mov ax, 2
    	add ax, ax
    	add ax, ax
    
    	mov ax, 4c00H
    	int 21H
    abc ends
    
    end  ;程序在此处结束
  4. abc被当作代码段来用,所以应该和abc和cs联系起来

    asm 复制代码
    assume cs:abs  ;abc和abc和cs联系起来
    abc segment
    	mov ax, 2
    	add ax, ax
    	add ax, ax
    
    	mov ax, 4c00H
    	int 21H
    abc ends
    
    end

2.4 程序编译

  1. 若使用下载的masm软件,则cmd打开终端,进入masm目录下

    • 输入:masm 要编译的asm文件路径,生成obj文件
    • obj文件在masm的安装目录下生成
    • 再输入:link obj文件名,可以生成对应的exe程序(64位电脑会不兼容,需要挂载到其他盘符上)解决masm在64位windows版本不兼容无法运行
  2. 用vscode插件,直接右键调试即可

    t命令:每次执行一条汇编指令

    当下一条指令为int 21H时,需要P命令表示程序结束。

3. BX寄存器

mov ax, 0是将ds:0000处开始的内容送入ax。

[0]表示一个内存单元,0是偏移地址,段地址默认ds,而长度由具体指令中的其他操作对象如寄存器指定。

bx的默认段寄存器也是ds

如:

mov ax, bx

mov al, bx

因为某些原因,我们使用"()"来表示一个寄存器或内存单元中的内容,如(ax)表示ax的内容,(20000H)表示内存。

4. loop循环指令

loop指令格式:loop 标号

CPU执行loop时,要进行两步操作:

  1. (cx)=(cx)-1
  2. 判断cx中的值,不为0则跳到标号处执行,为0则向下执行。

loop做循环指令,cx放循环次数。

asm 复制代码
assume cs:code

code segment
	mov ax, 2
	
	mov cx, 11
s:  add ax, ax
   loop s

	mov ax, 4c00h
	int 21h

code ends
end 


注意0和0在masm中的混淆:

在debug中,mov ax,0没有问题,但是在masm中会被当做mov ax,0处理。

解决:mov ax, 0

  1. 将0先放入bx中,再mov ax, bx
  2. 写出默认寄存器:mov ax, ds:0
相关推荐
2601_962296511 天前
C/C++:编译全过程——预处理、编译、汇编、链接(包含预处理指令:宏定义,文件包括、条件编译)
汇编·预处理·链接·c/c++·编译过程
Freak嵌入式2 天前
Pico PIO 汇编语法深度详解:标识符、指令、伪指令全解析
汇编·stm32·单片机·嵌入式硬件·fpga开发·硬件架构
kyle~7 天前
x86 汇编LOCK前缀 --- 硬件架构向软件提供的核心同步原语
汇编·c++·性能优化·硬件架构·实时系统
典典分享指南8 天前
飞书 + 企业微信 + 微信文档多端协同实践指南
汇编·flask·intellij-idea·fastapi
极客互动API13 天前
企业微信 iPad 协议服务搭建与 AI 回调实战
网络·汇编·人工智能·微信·企业微信·ipad
wechatbot88818 天前
极客互动企业微信 SCRM 私域运营实战效果全景
大数据·汇编·微信·自动化·企业微信·rpa
祈禾23 天前
计算机组成原理之编译、汇编、链接、解释
开发语言·汇编·笔记·学习
水饺编程25 天前
AT&T 汇编语言学习笔记开篇语
c语言·汇编·c++
iCxhust25 天前
8088单板机VScode集成开发环境使用方法二(汇编版)
汇编·单片机·微机原理·8088单板机
·薯条大王1 个月前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python