汇编语言
文章平均质量分 86
XV_
喜欢读书,热衷于探究本质,热爱技术,终身学习,不断成长。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【精华文】C语言结构体特殊情况分析:结构体指针 / 基本数据类型指针,指向其他结构体
参考链接:Structure pointer pointing to different structure instance注:可以查看此篇的问题和唯一的回复,那是相对正确的,不要看comment,有很多错误。我是拒绝分析这种问题的,因为似乎没有人会这么乱用,但是……在华保健老师的编译原理示例代码和Linux0.11内核中,就遇到了这么神奇的代码,那就不得不研究一下了!毕竟是大神写的代码,我不知道应该是我渣。1 测试代码#include <stdio.h>#include <.原创 2021-04-21 10:16:12 · 1018 阅读 · 0 评论 -
x86异常处理与中断机制(3)中断处理过程
上一节讲完了根据中断类型号找中断服务程序的过程,现在着重说明一下更加完整的中断处理过程吧。本节以8086时代的中断处理过程为例进行说明,主要分两大部分硬件处理软件处理需要注意,这不是绝对的,得看实际情况,简单来说就是,如果硬件本来就完成了相关必要动作,中断服务程序就不用再执行了,如果没有,就需要写入程序中执行相关操作。1 中断处理过程1.1 前提:产生&检测 中断中断处理的前提,是产生中断,然后检测到中断,否则怎么处理呢?对于中断的产生,分为内部和外部,内部就是指令执行产生的,原创 2021-04-18 21:38:55 · 863 阅读 · 0 评论 -
x86异常处理与中断机制(2)中断向量表
补充:事件不仅包含中断和异常,还包含系统调用,这个属于用户主动请求的事件。上一节,只有一个溢出异常,那么,如果很多异常、中断呢?(中断向量表)另外,之前0号地址只能存储两条指令,如果需要更多指令怎么办?(地址的位置以及对应程序大小应该更灵活)注意,中断服务程序包含(保存现场,调用处理方法(主体),恢复现场)我们在遇到中断之后,需要执行的步骤,我们简化一下CPU做一些硬件处理工作(识别中断源,关中断,当前指令(或下一条指令)地址压栈,FLAGS寄存器压栈)找到处理中断的程序地址(这里的程序是中原创 2021-04-18 21:06:00 · 2904 阅读 · 0 评论 -
x86异常处理与中断机制(1)概述中断的来源和处理方式
参考《计算机组成》(北京大学 MOOC)1 异常与中断的来源(为什么需要中断)首先,说明一下异常和中断这两个概念。它们两个唯一的区别,就是,没有什么区别。只是不同的地方不同的时间不同的人的叫法不一样,所以,不用太在意区别了,以后我们统称中断。1.1 什么时候发生中断一句话!CPU正在干活的时候,有事情打扰它,不让他继续正常工作了,需要去处理其他事情。那么是什么事情呢?这个事情分成两类内部的事情外部的事情1.1.1 内部的事情简而言之,就是执行指令的时候,出现状况了。出现什么状况了原创 2021-04-18 14:39:52 · 1402 阅读 · 0 评论 -
【汇编语言】(x86)test与跳转指令(je jle jge jg jl……)组合的含义
在x86指令集中,经常遇到text指令与条件跳转指令组合,这是什么含义呢?博主表示,查了很多资料也没人完全说清楚……这里只用最简单的,抽象层次进行说明,不讲原理。举例text edx,edxjle 某地址含义是:如果edx <= 0,就跳到某地址,否则继续往下执行。jle换成jg的话,就是edx > 0跳转。其他同理。与cmp指令和跳转指令组合的区别是:这个组合比较的是cmp A,B中,A与B的关系。而text A,A则比较的是A与0的关系。这些都是抽象层次的应原创 2020-06-05 22:25:50 · 15435 阅读 · 1 评论 -
【汇编语言】记录一组数中负数的个数,8086与MIPS汇编程序
题目及解答统计由DATA开始的字节数据串中负元素的个数,数据个数在COUNT单元,统计结果存入RLT单元。8086汇编:; 统计数字中负数的个数【循环中加了个if else】assume ds:datasgdatasg segment data db 1,-2,-3,-1,-4,0,-2 count dw 7 ; 数组有8个数字 plr dw ? ; 数字为负数的个数 datasg endsassume cs:codecode segmentstart: mov ax原创 2020-05-21 12:20:47 · 3963 阅读 · 0 评论 -
MIPS快速入门(原文+翻译):MIPS Architecture and Assembly Language Overview(持续更新中)
前言发布该文章的网站已经无法访问,无法获得相关翻译授权,本人的翻译仅供大家参考学习,尽可能使用直译,并加上一些译者注(使用“ [1] ”的形式),以减少信息损失,本人水平有限,还请见谅。本文不得用于其他用途,侵删。Adapted from: http://edge.mcs.dre.g.el.edu/GICL/people/sevy/architecture/MIPSRef(SPIM).html点此获取 >>> 英文原文资源链接其实我并不建议你看中译本,因为无论如何,翻译过后都会翻译 2020-05-19 21:37:35 · 5087 阅读 · 0 评论 -
【汇编语言】王爽实验8,分析一个奇怪的程序,学习笔记(20200517)
0 前言先给出源程序assume cs:codecode segment mov ax,4c00h int 21h start: mov ax,0 s: nop nop mov di,offset s mov si,offset s2 mov ax,cs:[si] mov cs:[di],ax s0: jmp short s s1: mov ax,0 int 21h mov ax,0 s2: jmp short原创 2020-05-17 15:09:21 · 713 阅读 · 1 评论 -
【汇编语言】数据类型的匹配问题:自动匹配与手动匹配
1原创 2020-05-17 09:35:21 · 1279 阅读 · 1 评论 -
【汇编语言】8086汇编字符串定义为何使用DB?其他数据类型不可以吗?(20200515复盘)
0 前言本文使用emu8086软件进行8086汇编语言编辑和运行。顺便说一句,汇编语言源程序中的数字,默认是十进制,因此使用十六进制的数字的时候,必须有h或H后缀,本文也都遵循这样的原则。至于为什么默认十进制,我只能说,编译器默认你是个人(不要笑!事实如此,如果默认你是机器,那么数字就默认十六进制了)。1 8086汇编语言中的字符串通常情况下,汇编语言中的字符串,都会被赋予DB(字节)数据类型,那么,为什么这样做?不能使用DW数据类型吗?当然可以,但是不建议使用。1.1 字符串的定义与使用原创 2020-05-15 18:12:56 · 20183 阅读 · 3 评论 -
【汇编语言】汇编语言如何编程,如何避免出错
0 前言这里以8086汇编语言举例。1 重要方法:画流程图这一点不再多说!你懂的!只要真的画流程图,并且按此翻译为汇编代码,程序出错几率就会减少很多。2 框架思维:构建标准编程框架这里只举例说明一部分框架,具体内容请读者自行完善。2.1 程序框架; 数据段assume ds:datadata segment <数据>data ends; 堆栈段assume ss:stackstack segment <堆栈> stack ends; 代原创 2020-05-13 17:41:01 · 798 阅读 · 0 评论 -
【汇编语言】8086汇编语言的debug中,t和p命令的区别
单步跟踪命令(单步进入(step in)):t命令是单步执行,是真的单步执行,碰到任何地方,都会一步步执行,遇到子程序,也会进入里面一步步执行再返回单步执行命令(单步通过(step over)):p命令,大多数情况与t一样,只有当遇到call调用子程序的时候,p命令直接执行完这个程序,而t命令会进入里面一步步执行。...原创 2020-05-13 12:00:13 · 3323 阅读 · 0 评论 -
【汇编语言】王爽实验5(5)(6)的解答 & 建立数据类型匹配的观念
0 前言本文解答王爽《汇编语言》实验5的(5)(6)题同时给出一些常见问题的解答以及给出最易犯错的地方:数据类型不匹配的解决方案1 题目解答1.1 实验5(5)1.1.1 题目将data1和data2段的数据依次相加,结果放入data3段data1 segment db 1,2,3,4,5,6,7,8 data1 endsdata2 segment db 1,2,3,...原创 2020-04-30 11:15:46 · 600 阅读 · 1 评论 -
【汇编语言】程序设计过程,如何避免数据类型匹配错误?
0 前言对于x86系列的汇编语言,AT&T格式需要使用后缀指明操作数的数据类型,Intel格式并没有这样的规定,但是,数据类型还是必须匹配,这就导致,一部小心就出现了8位对应16位、16位对应32位的情况,但是这样是错的。那么,如何在设计之初避免这个问题? 这是一个亟待解决的问题,我提出了一些思想观念帮你解决这个问题1...原创 2020-04-30 11:15:05 · 512 阅读 · 1 评论 -
【汇编语言】快速理解什么是寻址,什么是寻址方式
0 前言有很多专业的资料讲述这些概念,但是,虽然很专业,但是初学者根本看不懂!因此在这里,我用最简单的方式,告诉你什么是寻址什么是寻址方式1 计算机的极简模型计算机的世界中,只有二进制信息,不是0,就是1,没有其他信息。我之前说过,计算机世界是人类世界的映射(点此可以查看文章),这些二进制信息,是具备不同的含义的,通常分为两类:指令数据计算机的指令,指挥着数据如何变化,...原创 2020-04-29 15:34:41 · 6766 阅读 · 0 评论 -
【汇编语言】王爽第六章程序6.3解答,8086汇编语言实现数据的倒序存放
程序很简单,就是利用栈,实现数据的倒放。; 将数据逆序存放assume ds:datadata segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h data endsassume ss:stackstack segment dw 0,0,0,0,0,0,0,0stack endsassume cs:code...原创 2020-04-28 21:39:42 · 1478 阅读 · 0 评论 -
【汇编语言】8086汇编,快速搞定各种寻址方式:立即数寻址 / 寄存器寻址 / 存储器寻址
0 前言众所周知,对于8086汇编语言,有几大寻址方式,不过我觉得这个好墨迹,会用就可以了,为什么命名这么多,这次只说本质,不说命名,至于命名,还是得知道,毕竟是大部分人公认的,不能反抗这点哦,但是你知道,不代表你真的要这么去想。1 何为寻址?何为寻址方式?看了很多资料,让人眼花缭乱,各种专业词汇让人眼花缭乱,扑朔迷离,我直接用最简练的语言说明。寻址,就是找数据寻址方式,就是找数据的方...原创 2020-04-26 11:48:03 · 6792 阅读 · 1 评论 -
【汇编语言】(王爽)实验4解答
题目1编程:向内存0:200 - 0:23F 中存放数据 0 - 3FH; 向内存 0:200 ~ 0:23f 写入数据0~3fH【字节型数据】assume cs:codecode segmentstart: mov ax,0 mov ds,ax mov bx,0200H ; 偏移地址 mov al,0 ; 数据 mov cx,03fH+1H ; 0 ~ 3FH ...原创 2020-04-26 08:58:04 · 2506 阅读 · 1 评论 -
为什么要学习汇编语言?如何正确学习汇编语言?
汇编语言是计算机系统结构的接口,它介于软硬件之间,学习的时候,必须结合软件和硬件来学习。1 向上结合高级语言学习汇编语言的时候,不可孤立学习汇编语言,当今时代很少之间用到汇编语言编程,但是使用汇编语言分析问题,还是非常重要的。对于x86系列汇编语言,结合C语言学习效果会比较好。结合C语言,使用VS 2017调试模式下的反汇编工具学习32位x86汇编指令入门级书籍:《汇编语言》(王爽)...原创 2020-04-25 18:42:24 · 1795 阅读 · 0 评论 -
【汇编语言】8086、x86-32和C语言【赋值语句 和 数组】的对比学习(王爽学习笔记:5.8段前缀的使用)
0 前言这里给出两种思路,都比王爽老师书上的做法要简单高效,事实上,理解指令的本质,就能达到灵活应用,这样才能打破规则题目:将内存ffff:0 - ffff:b的数据,复制到内存ffff:10 - ffff:1b中备注:使用8086汇编语言1 思路一:使用push、pop指令push,pop指令的本质,是内存传送指令,它也是送数据的。例如pop DS:[EA]本质是mov DS:[...原创 2020-04-25 16:58:25 · 2185 阅读 · 0 评论 -
【汇编语言】8086汇编的loop循环与[bx]寻址(王爽第五章5.5节学习笔记)
计算FFFF:0 ~ FFFF:B单元中数据的和,结果存储到dx中1 分析与解决内存单元:字节型数据目标寄存器:dx,字型寄存器,不匹配数据范围:dx不会超,但是dl会超,因此必须用dx将字节型数据,转换为字型数据,前8位置为0利用循环,和bx的增加,实现寻址和累加assume cs:codesgcodesg segmentstart: ; 数据指向 ffff:0 ...原创 2020-04-24 10:03:44 · 1170 阅读 · 0 评论 -
【汇编语言】清华大学学堂在线《汇编语言程序设计》课程学习笔记
0 前言全是基于x86系列处理器1 寄存器与存储器的区别2 汇编程序员眼中的系统结构指令寄存器 PC(Program Counter)指向下一条指令的地址16位 CS:IP32位 EIP64位 RIP寄存器与寄存器堆(Registers)在处理器内部以名字方式访问的快速存储单元寄存器堆:一系列寄存器的集合条件码(Condition Codes)汇编...原创 2020-04-20 16:43:12 · 1400 阅读 · 0 评论 -
【汇编语言】学习源头知识:XLAT指令的本质(待更新)
0 前言带你理解XLAT指令的本质1 本质XLAT本质是mov al,ds:[bx+al],其他的都是表象,都是应用层级,但是本质都是在数据段中又开设了一个小数据段,这个小数据段也可以是使用段地址:偏移地址的方式来访问。使用XLAT指令的时候,需要做以下的事情:设置好DS考虑BX和AL的获取方式可以直接用内存某位置赋值可以使用一定的规则,例如通过sub(减法)获得设置BX...原创 2020-04-20 11:50:26 · 3163 阅读 · 1 评论 -
【汇编语言】结合C语言,使用VS 2017调试模式下的反汇编工具学习32位x86汇编指令
0 前言简要说明x86系列指令集的整体概况与变化。我给到你补充学习内容:使用VS学习汇编语言的教程1 8086CPU到现代CPU的变化做一些了解即可,不是绝对的,取决于设计工艺以及用途,不同计算机不一样也正常。1.1 CPU位数与地址总线宽度8086CPUCPU位数:16位数据寻址宽度(地址总线位数):20位寻址方式:段地址:偏移地址现代CPU64位地址总线:目前最大...原创 2020-04-19 15:29:51 · 1598 阅读 · 0 评论 -
【VS 2017 & C语言 & 汇编语言】如何使用VS 2017,通过反汇编查看C语言代码对应的32位x86汇编语言 & VS 2017单步调试的使用
0 前言本文适用于VS的大多数版本,本文以VS 2017为例进行讲解。1 编辑C语言代码首先,在VS编译器中,创建项目,敲一段C语言代码,这个过程不解释了,如果不会请百度。#include <stdio.h>#include <Windows.h>int main() { short a = 32; int i = 19; int *p = &...原创 2020-04-18 11:01:16 · 3910 阅读 · 5 评论 -
【汇编语言】理解8086CPU中,不同类型的寄存器和汇编指令规则的联系(会继续更新)
0 前言1 寄存器的分类我先从其他博客为你找来了8086CPU的全部寄存器及其功能原文链接在此通用寄存器:ax——accumulate register——累加器bx——based register——基地址寄存器cx——count register——计数器dx——data registered——数据寄存器段寄存器:cs——code segment——代码段ds——...原创 2020-04-15 14:05:51 · 1324 阅读 · 0 评论 -
【汇编语言】汇编实验IDE(集成开发环境):RadASM的安装和使用说明
0 前言本文适合8086CPU的指令集。对于重要的专业基础课程,汇编语言,做实验是必不可少的,但是由于汇编语言本身的缺陷,现代计算机并不能直接运行汇编语言程序,因此,一边老师会要求我们使用虚拟机:VMware/VirtualBox–>安装XP系统或者安装DOSBox这些工作的准备,对于初学者来说还是必要的,能够帮助你进一步理解编辑-->编译-->链接-->执行...原创 2020-03-24 21:53:50 · 13235 阅读 · 13 评论 -
【汇编语言】镜像迁移能力之一通百通——由代码段和CS:IP的原理,掌握一类寄存器的使用
0 前言你应该知道8086CPU的物理地址形成方式及其原理,才能完成本文的学习。1 内存的分段对于内存,人们人为地将其划分为一段一段的,比如代码段和数据段等,特别注意,这是人为划分的结果,方面人类使用,在物理器件上并不是真正的断开了。内存的分段就好比这样,人们把代码放在代码段把数据放在数据段再强调一次,这是帮助人们和汇编语言编译器区分,并不是真的把内存切开,这是虚拟的分段。1...原创 2020-03-16 21:33:41 · 488 阅读 · 0 评论 -
【汇编语言】上机实验 win7/8/10 64位系统 进入32位DOS模式 实现dubug/edit/masm/link功能
1 软件下载和安装下载并安装DOSBox软件,注意,不要装在C盘上,装在其他盘上【备注】软件直接百度搜索即可下载Debug.exe文件【备注】百度搜索“Debug 64位 下载”对于下载后得到的debug.exe文件将这个文件拷贝到磁盘根目录下,这里拷贝到E盘根目录下【备注】什么是根目录?就是点击磁盘后进入的地方对于这个界面,双击E盘,进入的页面就是E盘根目录,将debug....原创 2020-02-28 21:40:19 · 2149 阅读 · 0 评论 -
【C/C++ & 汇编语言 & Verilog】越界截断——数据越界问题的多角度分析
计算机是有容量限制的,因此,存储数据的大小是受限的,如果在某个过程中,数据大小超过了限度,多出来的部分,就会被计算机“截断”,从而造成数据丢失,在计算机体系结构的各个层级、各层级的各个阶段,都可能发生这种事情,设计者要尽可能避免这种问题。但同时,辩证的角度来说,越界截断现象,也可以发挥积极作用,人类发明了补码,利用越界截断,使计算机能够将减法运算转换为加法运算,减少了很多麻烦。原创 2020-02-23 21:26:32 · 2912 阅读 · 0 评论 -
【汇编语言学习之路】第一章 汇编语言核心方法论
版权声明:本学习笔记是本人根据小甲鱼“汇编语言学习课程”和《汇编语言》(王爽)的书籍,来记录笔记的1 汇编语言核心方法论1.1 核心思想汇编语言与机器语言是一一对应关系,它的本质是机器语言的代号。汇编语言机器语言汇编语言更符合人类的思维习惯,方便人类使用和记忆...原创 2020-01-23 17:52:26 · 700 阅读 · 0 评论
分享