汇编
Hean丶
这个作者很懒,什么都没留下…
展开
-
我是如何学习Java的~ 目录 (持续更新中)
学习阶段概述原创 2019-07-13 08:42:18 · 259 阅读 · 0 评论 -
我是如何学习Java的~更多的汇编指令和语法介绍
前面了解了 8086CPU 下的工作原理和相应的汇编指令、语法,已基本上可以编写很多复杂的功能程序。但对于汇编指令和语法,除了前面提到过的指令和语法外,还有许多其它的常用指令和语法,下面将对部分进行介绍。指令部分和传送数据有关的指令LEA 16位通用寄存器, 字型内存单元该指令把内存单元对应的偏移地址传送到指定寄存器中。如:assume cs:code, ds:datadat...原创 2019-08-11 16:21:00 · 391 阅读 · 0 评论 -
我是如何学习Java的~直接定址和子程序调用
在汇编源程序中,我们一般会使用标号来指明某段功能代码的开始地址,同样,我们也可以使用标号来表示我们定义的数据开始的偏移地址,如下:assume cs:codecode segment ;标号a,b指明两段数据开始的偏移地址 a: db 1,2,3,4,5,6,7,8 b: db 8 dup(0) start: mov ax, cs mov ds, ax mov e...原创 2019-08-05 21:57:56 · 379 阅读 · 0 评论 -
我是如何学习Java的~中断例程和端口
任何一个通用的 CPU,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从 CPU 外部发送过来的或内部产生的一种特殊信息,并且可以立即对所接收到的信息进行处理。这种特殊的信息,称为中断信息。CPU 接收到中断信息时,就会转去处理这个中断信息。中断信息有两种,内中断和外中断。内中断当 CPU 内部由如下情况发生时,就会产生中断信息:除法错误,如,执行除法时产生溢出错误单步执行...原创 2019-08-04 22:45:52 · 253 阅读 · 0 评论 -
我是如何学习Java的~标志寄存器及其应用
在8086CPU内部的寄存器中,还存在着一种特殊的寄存器,一些指令的执行会触发相应的该寄存器中特定位的值的改变,以用来记录指令执行的一些结果情况。这个寄存器被称为标志寄存器。标志寄存器也是16位,但不是每一位都有特定的含义的,真正有意义的只有9位,如下:1514131211108876543210OFDFIFTFSFZFAF...原创 2019-08-04 13:04:43 · 303 阅读 · 0 评论 -
我是如何学习Java的~灵活的程序跳转方式
CPU执行程序是依靠CS:IP来实现的,我们可以通过改变CS和IP的值来灵活的控制我们期望执行的程序。汇编中提供了丰富的转移指令来改变CS和IP的值。汇编程序中有很多的标号使用,有些标号作为段的地址,如标号code, data。有些标号作为某一段程序的开始,如标号start,标号s。标号的名称可以自己命名。在程序中的标号代表了某一段指令的偏移地址,可以通过 offset 标号 伪指令来获取标号处...原创 2019-07-21 18:53:34 · 354 阅读 · 0 评论 -
我是如何学习Java的~更灵活的寻址方式及应用
为了指明一个内存单元,可以通过段寄存器和偏移地址的方式来实现。偏移地址可以是立即数,也可以是寄存器 bx,但对于通用寄存器ax, cx, dx来说,是不能作为偏移地址来使用的。但可以通过寄存器si、di、bp来指定偏移地址。这些寄存器和立即数,只能用以下几种组合方式来表示偏移地址:// 立即数(data表示)或单个寄存器[data][bx][si][di][bp]// 单个寄存器...原创 2019-07-20 16:06:25 · 266 阅读 · 0 评论 -
我是如何学习Java的~编码和字符处理
在计算机中,所有的信息都是二进制的,但我们看到的却是各种各样的字符。这是这么处理的呢?这个时候就需要使用一些编码方案。当我们要把一些信息存储在计算机上时,需要对其进行编码转换为二进制信息进行存储,而需要显示这些信息时,就需要对其解码还原这些信息。需要注意的是,编码和解码要采用同样的规则。所谓的编码就是用什么样的二进制信息表示什么样的对象,解码时根据映射关系还原为本来的信息。下面介绍一种计算机通...原创 2019-07-20 14:06:21 · 214 阅读 · 0 评论 -
我是如何学习Java的~更多的语法和更安全的编程方式
在很多的功能中,我们可能会用更多的代码来满足。但大多时候这些代码并不是更好的实现方式,如求2的10次方,可以通过加法这样做:mov ax, 2add ax, axadd ax, axadd ax, axadd ax, axadd ax, axadd ax, axadd ax, axadd ax, axadd ax, ax但当求更多次方的时候,这样的代码就不适合了,发现这样的...原创 2019-07-18 22:09:30 · 171 阅读 · 0 评论 -
我是如何学习Java的~学习阶段概述
Java是一门面向对象编程的语言,Java程序的运行依赖于java虚拟机JVM的实现, JVM赋予了Java的跨平台特性,一次编译到处运行的特点使Java广受欢迎。为了更加深入的理解Java和相应的底层实现,进一步提升自己的Java能力,需要对JVM进行深入刨析。JVM由C语言、汇编语言等实现,为了后面的深入学习,需要对汇编和C有一定的基础。固分为三个学习阶段来一步步进阶和提升:第一阶段:汇编...原创 2019-07-07 13:41:17 · 245 阅读 · 0 评论 -
我是如何学习Java的~dosbox下装载运行汇编程序
在前面的章节中不仅搭建了dosbox汇编环境,同时还介绍了mov、add、sub、push、pop等汇编指令,也了解了CPU是怎么操控数据和运行指令的。但对于一个功能来说,是需要不同的指令组合才能实现的,同时对于汇编源程序的运行,还需要对其编译生成包含机器码的目标文件,之后通过连接功能最终生成可执行文件。对于最终生成的可执行文件,可以通过dosbox把可执行文件中的机器指令装载到内存中,同时运用...原创 2019-07-16 00:16:18 · 626 阅读 · 0 评论 -
我是如何学习Java的~内存数据、指令执行、栈操作
在8086CPU中,地址总线宽度为20,可以传送20位的地址,达到1MB的寻址能力,但寄存器都是16位的,所以表现出来的寻址能力只有64KB。在CPU寻址过程中,CPU会根据16位的段地址和16位的偏移地址来进行地址的合成,生成20位的物理地址。8086CPU中有以下段地址:DS:数据段地址,是默认的数据段地址,CPU根据该段地址和对应的偏移地址来获取内存数据SS:栈段地址,和SP(栈顶寄...原创 2019-07-14 17:06:34 · 318 阅读 · 0 评论 -
我是如何学习Java的~CPU简介和汇编环境搭建
CPU简介CPU是计算机的核心部件,主要有运算器、控制器、寄存器等器件构成。CPU的运行依赖于存储器即内存中的机器指令和数据。运算器、控制器、寄存器等器件由CPU中的内部总线进行连接控制,同时,CPU提供外部总线进行外部器件的控制。外部总线主要包括数据总线、地址总线、控制总线。数据总线的宽度决定了CPU和外部器件的数据的传送速度。对于8086CPU来说,数据总线宽度为16,一次可传送两...原创 2019-07-13 16:30:08 · 196 阅读 · 0 评论 -
我是如何学习Java的~Windows 10下搭建MS-DOS虚拟机
在前面的学习中,我们都是使用Dosbox软件来构建汇编环境的,但对于Dosbox来说,有些功能并没有相应的实现,如0号中断例程,为了更好的了解使用汇编和后续其它的一些功能,在此介绍一种使用VMware Workstation在Windows 10系统下搭建一套MS-DOS系统虚拟机。软件准备VMware安装在官网下载相应的版本,目前最新版本为15,正常安装即可,不做详细介绍。MS-...原创 2019-08-20 22:55:58 · 370 阅读 · 0 评论