8086CPU汇编语言学习笔记
一、汇编语言环境安装与配置
1. 这里主要是在8086CPU的环境下学习的汇编语言,所以需要模拟这样的环境。
**2. 下载 dosbox 和 masm ,dosbox 是一个dos模拟程序,我们现在用的操作系统和CPU大多数64位的,8086CPU和16位操作系统已经成为古董了,那么 dosbox 可以模拟这样的环境。masm 是汇编语言的编译和 link 的工具,且必须在 dosbox 环境下使用(如果有支持window32位或者64位下直接使用的编译工具,相应的汇编语言也是不同于8086CPU的汇编指令,这样的工具应该也是有的,有需要可以自行了解一下)。 **
下载地址(如果地址不对可以自己去相应的官网下载,或者给我留言,我发给你):
dosbox :
http://www.dosbox.com/download.php?main=1
http://sourceforge.net/projects/dosbox/files/
masm 5.0 :
http://www.x86asm.com/download/tool/masm/masm500.zip
**3. 安装dosbox,这个安装过程没什么要注意的,直接安装默认位置就好,文件很小,一路next。 **
4. 将masm加压到D:\masm\masm文件夹下,另外在D:\masm创建一个code文件夹用来存放asm源代码文件,以后写代码就在D:\masm\code下新建asm文件,然后将代码写到里面。(最好是先按照这样的路径,待熟悉了再琢磨路径的问题,这里不说这些东西,只是实现快速搭建环境)
以下就是我的masm的加压的路径,可以看到有几个exe文件,其中debug和masm以及link是学习汇编的过程中常用的。
5. 配置dosbox下源代码和编译工具的路径
找到dosbox的配置文件,有三种方式
1.桌面-DOSBox 0.74(快捷方式)-右键-属性-快捷方式-打开文件所在的位置(如果没有,找起始位置,C:\Program Files\DOSBox-0.74,在运行中输入打开文件夹),双击DOSBox 0.74 Options.bat
2.菜单-DOSBox 0.74 Options(windows 10 系统的用这个方法比较方便)
3.直接打开 C:\Users\Administrator\AppData\Local\DOSBox\dosbox-0.74.conf (Administrator是你当前用户名称)
在XP下 C:\Documents and Settings\用户名\Local Settings\Application Data\DOSBox\dosbox-0.74.conf
**配置:**找到 [autoexec] 一般就在文件底部,添加如下配置(双冒号是注释作用)
mount c: c:\ #真实机器的路径C:\ 挂载成 dosbox里C:盘mount d: d:\ #真实机器的路径D:\ 挂载成 dosbox里D:盘path d:\masm\masm #设置dosbox下环境变量PATH,就是你masm解压的位置,masm.exe等存放的位置 d: #切换到dosbox下的D:盘cd d:\masm\code #切换到dosbox下的源代码目录(asm源代码文件所在的目录) cls #清屏
注意:在dosbox中的命令或者文件名不论大小写。
二、第一个汇编程序
这里实现在屏幕上输出:Hello world
1. 编写代码
在D:\masm\code下创建一个后缀位asm的hello.asm文件,在里面编写代码如下:
assume cs:code
data segmentdb 'Hello world.' ; 定义字节,表示其后每个操作数占有一个字节(1Byte)单元
data ends
code segmentstart: mov ax,datamov ds,axmov ax,0b800h ; 显存起始地址mov es,axmov bx,0 ; db内容的起始位置mov si,6e0h ; 对应显示的位置mov cx,12 ; 循环次数,对应显示多少个字符s:mov al,[bx] mov es:[si+60+320],almov byte ptr es:[si+61+320],71h ; 以上显示白底蓝字inc bx ; bx + 1, inc相当于自增add si,2 ; si + 2loop s ; 循环执行s:后面的代码cx次mov ax,4c00hint 21h ; 这两句作用是调用 INT 21H 的 4CH 号中断,安全退出程序
code ends
end start
2. 编译和连接
打开dosbox,会出现两个窗口,我们一般使用的是如下窗口:
编译命令: masm hello
这里的hello相当于hello.asm文件
然后会提示要求输入obj的名称等等,这里不用理会,直接三次回车(表示默认与asm文件同名),假如没有出错(假如出错,一般是文件找不到或者语法错误),则编译成功结果如下:
连接命令:link hello
这里的 hello 指的是编译成功后产生的 hell.obj 文件,这里同样的不用理会提示输入exe名称等,直接三次回车,然后看到一个warnning:no stack segment,不用理会,连接成功如下:
3. 运行
执行命令: hello
需要注意的是,这里的exe文件都是在dosbox下模拟8086CPU汇编程序编译连接而来,所以必须在dosbox环境下执行。
这里的 hello 指的是 hello.exe,结果将会在dosbox的窗口下打印“Hello world.” :
4. debug
debug命令: debug.exe hello.exe
**注意:**这里必须把 .exe 写出来,不能省略后缀,否则会报错extend error2。
在debug中 r 命令表示查看或改变寄存器中的值,d 命令查看内存中的值, e 命令改写内存中的值,t 命令执行一条指令(t n 表示执行n条指令)
感谢您的阅读,欢迎参观我的个人网站:闲乐小站【www.xianlewang.cn】
8086CPU汇编语言学习笔记相关推荐
- 32位汇编语言学习笔记(45)--测试简单文件操作接口(完)
这是<Assembly Language step by step programming with linux>书中的最后一个程序,也是全书中的最复杂的一个程序. 首先看一下这个程 ...
- MIPS汇编语言学习笔记23:if 语句分支指令
C语言 #include<stdio.h> int main() {int i = 3;if (i < 5){printf("yes!\n");}else{pri ...
- MIPS汇编语言学习笔记07:打印双精度浮点数
课程原视频: https://www.bilibili.com/video/BV19J411y7pA?p=7 程序功能: 设定两个双精度浮点型数据,将其相加后打印输出. 代码: .datamyDoub ...
- windows下32位汇编语言学习笔记
windows下32位汇编语言学习笔记 第一章 第一章 背景知识 80x86处理器的存储器 4个数据寄存器 EAX,EBX,ECX,EDX EAX寄存器 所有API函数的返回值都保存在EAX里,注意 ...
- win32汇编语言学习笔记(三)
汇编语言学习笔记(三) CH3.Windows汇编基础 .386 .model flat,stdcall option casemap:none 定义程序使用的指令集.工作模式 相应的还有:.8086 ...
- MIPS汇编语言学习笔记11:整数减法 (mult方法)
任务:整数相乘,并输出打印. 代码: .dataintA: .word 5intB: .word 2 .textli $v0, 1lw $a1, intAlw $a2, intBmult $a1, $ ...
- 菜鸟的汇编语言学习笔记
汇编语言学习笔记 1.1机器语言 计算机发展初期,人们都是用机器语言进行编程的,这也是人们能实现编程控制计算机的最低级别.那么机器语言是什么样子的呢?就是用0和1组成的一个串(形如011010101) ...
- Linux下汇编语言学习笔记12 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记65 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
最新文章
- The Future of Silverlight --December 2, 2010 at 9:00
- linux svn磁盘空间满,Linux svn checkout时候总报设备上没有空间
- python如何获取信息_如何使用Python获取系统信息?
- 创业路上有指引,永洪CEO给企业服务型创业公司的融资建议
- 如何阅读3,500万个博客?
- mysql主从报错_Mysql主从报错锦集
- CCNA学习与实验指南(640-802)
- pandas 读取/保存压缩格式的csv文件.csv.gz
- 程序员面试金典——5.5整数转化
- 漏洞扫描与云服务器的安全防护
- 【MATLAB学习】02:MATLAB绘图
- MySQL 基础一(B站黑马程序员MySQL教程笔记)
- java security provide_Java SecurityManager類代碼示例
- 信息安全实验三 :PGP邮件加密软件的使用
- css 实现心形加载动画
- Windows下WinRar创建自解压文件
- 美业SaaS的创业分享之[销售]:销售和销售管理
- ONE~~~~~~~~~
- 如何区分电脑上的硬件和软件?
- Stanford cs140 Pintos Project2实验目标