说明
  本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
  QQ 群 号:513683159 【相互学习】
内容来源
  在DOS年代,人们买电脑干什么?、DOSBox是什么
  什么是NASM、nasm与masm编译器的优劣、什么是MASM?
  (转)gas汇编小手册 学习Linux内核代码的必备、GNU Binutils 介绍
  Linux 汇编语言开发指南
  

上下文链接

  下一篇:汇编语言学习篇2——MASM的环境搭建(win10与Ubuntu1604下的配置)

DOSBox简介

  DOSBox 是一个x86 DOS 模拟程序,采用的是 SDL 库,故方便移植。
    作用:运行现代计算机不能运行的MS-DOS软件。

  DOS = Disk Operation System = 磁盘操作系统 ,即:一个基于磁盘管理的操作系统。
    1.以命令行的形式,靠输入命令进行人机交互。(也有很多软件:游戏、办公软件、财务软件等)
    2.基本功能:执行命令和程序功能、I/O管理功能、磁盘与文件管理。
    3.由微软开发,在微软后续发布的计算机操作系统中,磁盘系统一直被保留着。(微软图形界面操作系统Windows NT问世以来,DOS以后台程序的形式出现。名为Windows命令提示符【运行(Win+R)——》CMD】)

汇编语言(符号语言)

简介:

  一种面向机器的程序设计语言(低级编程语言),用助记符代替机器指令的操作码,用地址符号标号代替指令或操作数的地址。
  特定的汇编语言特定的机器语言指令集是一一对应的,即:不同设备的汇编语言对应不同的机器语言指令集,不同平台之间不可直接移植。

优缺点:

  优点
    1.能直接访问与硬件相关的存储器或 I/O 端口;
    2.能不受编译器的限制,对生成的二进制代码进行完全的控制;
    3.能对关键代码进行更准确的控制,避免因线程共同访问或者硬件设备共享引起的死锁;
    4.能根据特定的应用对代码做最佳的优化,提高运行速度;
    5.能最大限度地发挥硬件的功能。
  缺点
    1.编写的代码非常难懂,不好维护;
    2.很容易产生 bug,难于调试;
    3.只能针对特定的体系结构和处理器进行优化;
    4.开发效率很低,时间长且单调

汇编器(GAS、MASM、NASM)

分类:

  不同风格的汇编语言格式会有不同,并需对应的汇编器进行汇编,比较流行的汇编语言有3种:
    1.AT&T风格的汇编语言:(特点是寄存器前面有%号)
      GAS汇编器 - GNU Assembler - GNU汇编器 - GAS官网链接
      GAS属于GCC的一部分。无需单独安装,可使用指令as --version检查GAS的存在。
    
    2.Windows风格的汇编语言:
      MASM汇编器 - Microsoft Macro Assembler -Microsoft宏汇编程序 - MASM官网链接
    
    3.NASM风格的汇编语言:
      NASM汇编器 - Netwide Assembler -基于x86架构的汇编与反汇编软件 - NASM官网链接
      编写16位(8086、80286等)、32位(IA-32)和64位(x86_64)的程序。【支持x86与x64架构的CPU(注意不支持ARM架构)。】

GAS MASM NASM
平台 Linux DOS/Windows Windows/Unix/ Linux/Mac OSX
语法风格 AT&T Intel Intel
软件类型 自由软件 微软开发 开源工具

  Linux 汇编工具 (GAS与NASM)

GAS NASM
汇编器
(assembler)
GCC 所依赖的后台汇编工具,
包含在 binutils 软件包,
as hello.s -o hello.o
提供了很好的宏指令功能,
支持相当多的目标代码格式,
执行速度快于GAS
(人工编写的语法分析器),
nasm -f elf hello.asm
链接器
(linker)
链接程序ld,包含于binutils 软件包
ld -s hello.o -o hello
调试器
(debugger)
GDB、DDD、ALD(Assembly Language Debugger)
as --gstabs -o hello.o hello.s
ld -o hello hello.o

  AT&T与Intel语法的区别

区别 AT&T Intel
使用寄存器 加前缀%:pushl %eax 无前缀:push eax
使用立即数 加前缀$:pushl $1 无前缀:push 1
源操作数与目标操作数相反 addl $1, %eax:eax寄存器+1
操作符 源操作数 目标操作数
add eax, 1 :eax寄存器+1
操作符 目标操作数 源操作数
操作数的字长 由操作符的最后一个字母决定,
'b' =byte-字节-8 比特、
'w'-word-字-16比特、
'l'-long-长字-32比特,
如:movb val, %al
由操作数的前缀决定,
"byte ptr"-8 比特
"word ptr-16 比特
"long ptr-32 比特
如:mov al, byte ptr val
绝对转移
调用指令
返回指令
加前缀*:
ljump $section, $offset
lcall $section, $offset
lret $stack_adjust
无前缀
jmp far section:offset
call far section:offset
ret far stack_adjust
内存操作数的寻址方式 section:disp(base, index, scale) section:[base + index*scale + disp]

汇编语言学习篇1——DOSBox、汇编语言、汇编器的认识相关推荐

  1. 【汇编语言学习之路】第一章 汇编语言核心方法论

    版权声明:本学习笔记是本人根据小甲鱼"汇编语言学习课程"和<汇编语言>(王爽)的书籍,来记录笔记的 1 汇编语言核心方法论 1.1 学习汇编语言的必要性 汇编语言与机器 ...

  2. 搭建8086汇编语言学习环境——dosbox

    搭建8086汇编语言学习环境 资源网盘链接:链接:https://pan.baidu.com/s/1gamz6WYIWLOv5WP9H8L2Ng 提取码:ydvv 复制这段内容后打开百度网盘手机App ...

  3. X86汇编语言学习手记(1)

    X86汇编语言学习手记(1) 作者: Badcoffee Email: blog.oliver@gmail.com 2004年10月 原文出处: http://blog.csdn.net/yayong ...

  4. 汇编语言学习和常见错误(个人总结)

    博主最近在学习汇编语言课程,发现在学习过程中有许多坑,在此进行简单的总结和汇总.后续内容会进行更新. 错误篇 1.Error T.ASM(16) Undefined symbol: AX,AX :Wa ...

  5. 16位汇编语言学习笔记(1)——基础知识

    文章目录 1.配置汇编学习环境 1.1 工具下载 1.2 配置环境 2. 汇编命令基础 2.1 简单使用 2.2 常用命令 3. 汇编语言基础 3.1 汇编语言程序与汇编程序 3.2 汇编语言程序的格 ...

  6. 汇编语言学习:使用王爽写的《汇编语言》第三版(编程环境配置)

    汇编语言学习 参考书:使用王爽写的<汇编语言>第三版 学习工具(win7 x64): DOSBox 0.74.masm.exe.link.exe.debug.exe. 另外需要一款编辑器, ...

  7. 菜鸟的汇编语言学习笔记

    汇编语言学习笔记 1.1机器语言 计算机发展初期,人们都是用机器语言进行编程的,这也是人们能实现编程控制计算机的最低级别.那么机器语言是什么样子的呢?就是用0和1组成的一个串(形如011010101) ...

  8. AM335X的汇编语言与c语言,X86汇编语言学习手记 -- 汇编和C协同

    X86汇编语言学习手记(3) 2004年12月 在X86汇编语言学习手记(1)(2)中,可以看到栈(Stack)作为进程执行过程中数据的临时存储区域,通常包含如下几类数据: 局部变量 函数调用的返回地 ...

  9. linux平台学x86汇编语言学习集合帖

    linux平台学x86汇编语言学习集合帖 linux平台学x86汇编(一):https://blog.csdn.net/shallnet/article/details/45543237 linux平 ...

最新文章

  1. YOLOv4没交棒,但YOLOv5来了!
  2. 验证数字的正则表达式集
  3. ES6-let const
  4. 为什么不让安装卫xing×××啊
  5. 常考数据结构与算法:用两个栈实现队列
  6. 如何查看某个端口被哪个进程占用
  7. linux module原理,NodeJS的模块原理
  8. AliOS Things声源定位应用演示
  9. swift开发:试玩 Apple 网站的 playground
  10. slab中记录空闲对象
  11. poj 3026 Borg Maze (bfs + 最小生成树)
  12. Kafka从上手到实践 - Kafka集群:启动Kafka集群 | 凌云时刻
  13. 跟着鬼哥学爬虫-2-糗事百科
  14. msf后渗透之获取登入password、远程控制、调用摄像头
  15. 基于等效积分形式的近似方法——加权余量法(配点法,伽辽金法)求解微分方程近似解
  16. 一个微信投票小程序防止刷票的想法
  17. Windows高效文件搜索工具/Everything/Listary/uTools
  18. 【数据分析】快速获取微博用户数据,图片,视频
  19. Acmer--弱水三千,只取一瓢
  20. U盘格式化后容量变小了_内存丢失如何恢复?

热门文章

  1. 模型训练遇到数据量太大而导致内存不够问题?今天教你一招
  2. Crystal Xcelsius 2008 统计图用法
  3. Python绘制成都地铁全线路图!有路线图也搞不清楚啊!
  4. 小狸启蒙“匠心”做教育,个性化学习多维助力孩子成长
  5. Postgres-XL数据库集群安装
  6. angular有哪些优缺点?
  7. hdlc和ppp的pap认证和cahp认证
  8. 微博语录精摘2011-08-03
  9. 北京好吃地点大全[转载]
  10. 面试官:深拷贝与浅拷贝有啥区别?