汇编
大三上汇编笔记
6201-B
这个作者很懒,什么都没留下…
展开
-
汇编实验二
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档汇编实验二问题问题附加段ES:DI,DI的初始值自动为0?原创 2020-11-02 21:46:45 · 246 阅读 · 0 评论 -
汇编之堆栈
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言前言堆栈段:用一个段当作栈,把它定义为“栈段”看王爽老师汇编书原创 2020-11-02 21:00:26 · 300 阅读 · 0 评论 -
汇编语言程序格式二
汇编语言程序格式二前言语句格式语句基本格式数据定义及存储器分配伪操作伪操作格式用LABEL伪操作来定义指令地址计数器与对准伪操作地址计数器$ORG伪操作操作数项算术操作符逻辑与移位操作符关系操作符数值回送操作符属性操作符PTRSHORTTHISHIGH和LOW/HIGHWORD和LOWWORD操作符的优先级别汇编源程序结构段定义伪操作完整的段定义伪操作存储模型与简化段定义伪操作过程定义伪操作程序开始和结束伪操作COM文件前言语句格式语句基本格式数据定义及存储器分配伪操作伪操作格式用LAB原创 2020-11-01 11:45:46 · 1262 阅读 · 0 评论 -
汇编实战五(实验一)
汇编实战五(实验一)前言第一道题前言第一次做汇编实验第一道题不使用串操作指令的情况下,完成如下功能:比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示“MATCH”,若不相同则显示“NO MATCH”。DATAS SEGMENT ;此处输入数据段代码 S1 DB '12345678' LEN_1 EQU $-S1 S2 DB '12345678' LEN_2 EQU $-S2 ;这样len1和len2就是两个字符串的长原创 2020-10-27 10:54:19 · 349 阅读 · 0 评论 -
汇编之数据的定义
汇编之数据的定义原创 2020-10-27 08:25:43 · 838 阅读 · 0 评论 -
汇编之寻址方式
汇编之寻址方式前言与数据有关的寻址方式立即寻址例寄存器寻址寄存器间接寻址寄存器相对寻址存储器寻址直接寻址寄存器间接寻址寄存器相对寻址例基址变址寻址相对基址变址寻址与转移地址有关的寻址方式段内直接转移段间直接转移段间直接转移段间间接转移前言寻址方式真的是汇编里最基础最重要的内容,一开始觉得听懂了,用着用着又糊涂了,所以总结一下。所谓寻址,就是寻找操作数所在地址的方法。源操作数:运算数据的来源目标操作数:运算结果的去向或另一个运算数据先目的后源操作数可能的来源或运算结果可能的去处只有三个:由原创 2020-10-26 22:15:20 · 1287 阅读 · 0 评论 -
汇编语言程序格式一
汇编语言程序格式前言语句格式语句基本格式伪操作格式属性汇编源程序格式段定义伪操作过程定义伪操作程序开始和结束伪操作前言语句格式语句基本格式伪操作格式属性汇编源程序格式段定义伪操作过程定义伪操作程序开始和结束伪操作...原创 2020-10-26 15:17:56 · 2132 阅读 · 0 评论 -
汇编之控制转移指令之子程序、中断指令和系统功能调用
汇编之控制转移指令之子程序、中断指令和系统功能调用前言子程序CALL调用指令RET返回指令中断指令和系统功能调用中断与中断源中断种类中断向量软中断指令中断响应过程中断嵌套中断处理程序设计设置中断向量DOS系统功能调用前言子程序在汇编语言中将某些具有独立功能的部分编写成独立的程序模块,称之为子程序。CALL调用指令RET返回指令中断指令和系统功能调用中断与中断源中断种类中断向量软中断指令中断响应过程中断嵌套中断处理程序设计设置中断向量DOS系统功能调用...原创 2020-10-26 15:12:47 · 454 阅读 · 0 评论 -
汇编之算术运算指令
汇编之算术运算指令前言加法指令ADD加法指令ADC带进位加法指令INC加1指令减法指令SUB减法指令SBB带结尾减法指令DEC减1指令NEG求补指令CMP比较指令乘法指令除法指令类型转换指令前言运算类指令影响标志位加法指令ADD加法指令ADC带进位加法指令INC加1指令ZF:零标志位减法指令SUB减法指令SBB带结尾减法指令DEC减1指令NEG求补指令CMP比较指令乘法指令除法指令类型转换指令...原创 2020-10-08 21:40:37 · 1507 阅读 · 0 评论 -
汇编之控制转移指令
汇编之控制转移指令前言前言原创 2020-10-21 21:37:18 · 2312 阅读 · 0 评论 -
汇编之输入输出指令
汇编之输入输出指令输入输出指令in输入指令应用实例out输出指令应用举例输入输出指令在8086中,所有的I/O端口和CPU之间的通信都由IN和OUT完成。CPU只能用累加器(AL或AX)接收或发送信息。也就是说,8086中,CPU对外设的操作只能通过IN和OUT这两条专门的端口读写指令来实现。IN和OUT实际上是纯传数指令,可以传字节也可以传字。IN和OUT都是对CPU而言的IN是外设给CPU传数,OUT是CPU给外设传数。IN和OUT都不影响标识位。in输入指令外设地址有16位的也原创 2020-10-08 20:52:10 · 6550 阅读 · 1 评论 -
汇编程序的格式和模板
汇编程序的格式和模板前言前言王爽老师的《汇编语言》在P127说:我们可以这样来安排程序的框架:assume cs:codecode segment……数据……start:……代码……code endsend start但是我们有时候也会看到这样的程序关于这种程序框架,请参考这俩篇回答汇编中main proc far是什么意思?一个古老的汇编框架也就是说,这也是一种汇编框架,但现在用的很少了。main proc farpush dsxor ax, axpus原创 2020-10-08 10:22:57 · 2765 阅读 · 0 评论 -
汇编之段
汇编之段段段中定义一些数据段这是典型的定义数据段和附加段的汇编语句。data segmentdata ends是一对成对使用的伪指令,也是写汇编程序时必须要用到的一对伪指令。因为一个有意义的汇编程序中至少要有一个段。segment和ends的作用是定义一个段,segment说明一个段开始,ends说明一个段结束。data就是一个标号,是这个段的名称,这个段的名称最终将被编译,连接程序处理为一个段的段地址(P79)简单的说:段名就相当于一个标号,它代表了段地址。段的地址,也就是dat原创 2020-10-07 11:40:50 · 1283 阅读 · 0 评论 -
汇编实战三——正确的masm2015汇编过程
汇编实战三前言前言老师的ppt汇编上机(源程序)中的串复制程序在masm2015中执行时遇到了问题。按照start未定义解决后,程序不再报错。现在我有一些疑惑,汇编程序执行结束后是会把寄存器的内容都又恢复成0吗我在masm2015里点了运行,再用r查看寄存器的值,为什么都还是0呢,起码在这个程序里,si和di不应该是0啊然后我查看了代码段和数据段(实际上他们俩是重复的),里面也没有a...原创 2020-10-08 09:35:29 · 1402 阅读 · 0 评论 -
汇编中的名字(标号和变量)
汇编中的标号前言一些标号段的名称 codesg前言汇编程序中,除了汇编指令和伪指令,还有标号一些标号段的名称 codesgcodesg只是一个例子。codesg segmentcodesg endscodesg就是一个标号,是一个段地名称,这个段的名称最终将被编译,连接程序处理为一个段的段地址(P79)简单的说:段名就相当于一个标号,它代表了段地址。...原创 2020-10-05 21:40:24 · 8092 阅读 · 0 评论 -
汇编中的start和main
汇编中的start和main前言start和main前言我还是汇编新手,在阅读汇编程序时,看到start和main会觉得疑惑,这篇博文就是围绕此展开。start和main王爽老师的书中关于start的讲解出现在P126assume cs:codecode segment dw 0123h start: mov bx,0 mov ax,0code endsend start;这里的代码都是乱写的,看结构就行在程序的第一条指令的前面加上一个标号start,同时这个标号还在伪指令原创 2020-10-05 21:03:24 · 3984 阅读 · 0 评论 -
宏和子程序
宏和子程序前言宏子程序call和retret前言宏和子程序是有相似之处却也有很多不同之处的两个概念,要加以区分。宏子程序子程序是依赖于call和ret来实现的,因此我们先看一下call和ret指令的原理。call和retcall和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP,它们常常被共同用来实现子程序的设计。retret指令用栈中的数据,修改IP的内容,从而实现近转移。retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。这部分王爽老师的书的P190说的很清原创 2020-10-06 09:21:15 · 652 阅读 · 0 评论 -
汇编中的结束
汇编中的结束可参考王爽老师汇编教材中的P81汇编中有很多关于”结束“的内容,要对它们有所区分。段结束ends程序结束end程序返回mov ax,4c00Hint 21H原创 2020-10-04 21:06:17 · 3443 阅读 · 0 评论 -
汇编中的伪指令
汇编中的伪指令什么是伪指令?一些常用的伪指令ASSUMEsegment……endsend什么是伪指令?伪指令(Pseudo Instruction)是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有机器代码,只用于汇编过程中为汇编程序提供汇编信息。例如,提供如下信息:哪些是指令、哪些是数据及数据的字长、程序的起始地址和结束地址等。伪指令有2个特点:(1)由于是伪“指令”,因而它只存在于汇编语言中。高级语言中不叫指令,叫语句;(2)由于是“伪”指令,也即“假”指令,因而不是可执行指令,不会原创 2020-10-04 23:19:36 · 6518 阅读 · 1 评论 -
汇编中的重复指令
汇编中的重复指令REPLOOPREP和LOOP的异同不同相同DUPREPrep是字符串操作指令MOVS,CMPS等的前缀,在CX不等于0的情况下,对字符串执行重复操作。rep的重复次数也存在cx中,但是其实cx本身不具有让cx-1的功能,一般是rep后面跟着的指令执行之后自动让cx-1还可以扩展出:REPE(相等时重复)、REPNE(不相等时重复)、REPZ(为零时重复)及 REPNZ(不为零时重复)LOOPLOOP指令的格式是:loop 标号CPU执行至loop指令的时候,要进行两步操作原创 2020-10-04 18:14:14 · 4684 阅读 · 0 评论 -
默认在数据段
默认在数据段直接寻址方式:直接寻址方式的操作数有效地址只包含位移量一种分量,即在指令的操作码后面直接给出有效地址(EA=位移量),一般来说,如果没有明确给出段寄存器名称,则默认在数据段中(DS为数据段的寄存器),如果需要实现段超越,此时需要在指令中指出要用到的段寄存器。(其中[ ]括起来的整体代表地址)...原创 2020-10-03 14:45:42 · 337 阅读 · 0 评论 -
汇编标志位
汇编标志位标志寄存器9个标志位ZF标志位标志寄存器标志寄存器就是一个寄存器,它有16位。其他的寄存器都是整个寄存器具有一个含义,而flag(标志寄存器)是按位起作用的,也就是说它的每一位都有专门的含义。标志寄存器的有些位不使用,也不具有任何含义。在8086的指令集中,有的指令的执行是影响标志寄存器的,它们大多是运算指令(进行逻辑或算术运算);有的指令的执行对标志寄存器没有影响,它们大多是传送指令。影响标志位的汇编指令9个标志位ZF标志位zero,零标志位。记录相关指令执行后,结果是否为原创 2020-10-03 13:51:30 · 2200 阅读 · 0 评论 -
汇编串操作指令总结
串操作指令串操作指令说明串操作指令的要求粗浅的翻了王爽老师的汇编书,感觉串操作说的不是很明白(也有可能我没找到在哪里)所以在这里总结一下这份总结主要是按照吴宁老师的mooc来讲的串操作指令说明串操作是针对数据块或字符串的操作可实现存储器到存储器的数据传输(数据块和字符串,一般都比较长,寄存器也放不下,所以大多数时候串操作要实现的都是存储器到存储器的操作)待操作的数据串称为源串,目标地址称为目标串。(其实是把一块区域称为目标串)虽然串可能很长,但是传送的时候依然是要一个字节一个字节或一个字原创 2020-09-28 11:46:01 · 1927 阅读 · 1 评论 -
汇编指令的禁忌整理
汇编指令的禁忌整理一些通用的禁忌一些通用的禁忌双操作数指令不允许两个操作数同时为段寄存器或存储器操作数。代码段寄存器CS和立即数均不能作为目的操作数,立即数也不能传送到段寄存器中。立即数要想传到段寄存器中,可以使用间接传输法。MOV BX,1000HMOV DS,BX双操作数中的两个操作数必须类型匹配,即同时是字节或者字两个操作数中至少有一个操作数的类型要明确,不能出现二义性。立即数传送给存储器时,立即数的类型定义不明确,存储器操作数的类型需要使用操作符来明确。寄存器都有明确原创 2020-09-27 23:06:31 · 2308 阅读 · 0 评论 -
汇编实战三——对标号的纠结
汇编实战三什么是标号?什么是标号?今天什么是标号这个问题非常困扰我。王爽老师的书对标号的定义在P79“一个标号指代了一个地址。”可是看到老师ppt上的这番话,我又迷惑了!LEA是去有效地址指令,也就是把偏移地址取出来的指令。如果list这个标号“就是”地址,那么直接MOV BX,LISTBX中的应该就是地址啊。因为LIST本身就是地址啊。这件事真的把我搞蒙了。所以我们来好好看看标号吧根据汇编中的标号概念这篇博文标号分为地址标号,数据标号。地址标号的典型应用是jmp s原创 2020-09-27 21:41:28 · 428 阅读 · 0 评论 -
汇编实战二
汇编实战二debug指令debug指令如图,使用debug -r,可以看到各个寄存器的值。这个值和书上的值是不一样的,可见每一台不同的电脑,或者一台电脑上不同的时刻,这些值都是不一样的。总之他们不是固定的。看一下cs和ipcs=0740ip=0100也就是说,内存0740:0100处的指令为CPU当前要读取,执行的指令。如图,可以改变寄存器AX的值用“段地址:偏移地址”可以查看内存中的内容输入1000:0,可以看到1000:0~1000:7F中的内容其实应该是0000~007F原创 2020-09-28 08:37:18 · 159 阅读 · 0 评论