汇编语言程序设计 第5~8章概念梳理

汇编语言程序设计第5~8章小结:

第5章:

直接寻址和间接寻址问题:

直接寻址:mov dl,[0]; dl=((ds)*16+0)
间接寻址:mov bx,0 mov dl,[bx];dl=((ds)*16+bx)

assume cs:code
code segment
mov ax,1
mov cx,8
s: add ax,ax
loop s
mov ax,4c00h
int 21h
code ends
end

循环操作 段前缀标记所指的部分代码,直到cx寄存器当中的值变为零

t命令、p命令、g命令小结:
t命令:遇到loop会进入循环内部继续单步执行
遇到int会进入中断程序内部继续单步执行

p命令:单步执行;遇到loop或者int会当作整体执行,不进入内部单步执行

g命令:执行到指定地址,或遇到程序结束或int,则终止执行.

计算内存单元00202H和00204H中存放的字数据之和

mov ax,0020h
mov ds,ax
mov dx,0
add dx,[2]
add dx,[4]

注意字节与字数据的大小关系兼容问题:
在求字节数据相加之和时,不能使用字大小寄存器去取值。

在完整的汇编源程序当中,应当显式写出段前缀,防止反汇编错误。

第6章:

在代码段中使用数据:(示例代码)
assume cs:code
code segment
dw 0123h,0456h,0789h, 0abch,
0defh,0fedh, 0cbah, 0987h
mov ax, 0 ;ax用来存放求和结果
mov cx, 8
mov bx, 0 ;bx用来存放偏移地址
s: add ax, cs: [bx] ;使用寄存器代表偏移量
add bx, 2
loop s
mov ax,4c00h
int 21h
code ends
end

使用u进行反汇编命令时,由于数据和代码在一个段中,地址cs:0000~cs:000f中存放的是
8个字数据(占16个字节)
反汇编时,如果从cs:0000开始,会把它们当做指令机器码反汇编.
如想让程序从这里执行,有两种方法:
1、debug时,通过r命令修改ip的值或在t/g命令中指定执行的起始地址。
2、在源程序中指定

代码和数据在同一个段内程序框架:
assume cs:code
code segment
×××(数据)

start: ×××(代码)

mov ax,4c00h
int 21h
code ends
end start

使用伪指令segment和ends定义逻辑段后,究竟是用作代码段、数据段还是栈,由程序员指定。

使用assume仅仅表示将某个逻辑段和某个寄存器关联起来;真正当作特定的段使用,需要在代码
段中设置相应的段寄存器值,如ds,ss。

段名代表的是段地址,是常数。不能使用mov直接送入段寄存器

第7章:

按位逻辑与运算:
mov al,01100011B
and al,00111011B
结果:00100011B

按位逻辑或运算:
mov al,01100011B
or al,00111011B
结果:01111011B

debug中,默认位十六进制
在完整汇编源程序中,默认十进制,支持二/十六进制。
a命令不支持诸如‘a‘这样的写法,只能使用字符ASCII码的十六进制表示
e命令支持诸如‘a‘这样的写法,例如:-e 0200:0 ‘a‘ ‘b‘ ‘c‘

字母的大小写转换问题:
大写--->小写 mov dl,‘A‘ add dl,32
小写--->大写 mov dl,‘a‘ sub dl,32
使用逻辑或运算进行修改:
大写--->小写 mov dl,‘A‘ or dl,00100000B;
小写--->大写 mov dl,‘a‘ or dl,11011111B

将字符‘1‘--->数值1
mov dl,‘1‘ sub dl,48
将数值1--->字符‘1‘
mov dl,‘1‘ add dl,48

一般来说,在需要暂存数据的时候,我们都应该使用栈
例如双层循环,在每次内存循环开始的时候,将外层循环的cx中的数值保存起来,在执行
外层循环的loop指令前,再恢复外层循环的cx的值,可以用寄存器dx来临时保存1cx中的数值

第8章:
在8086CPU中,可用于表示内存偏移地址的寄存器只有BX,SI,DI和BP.
使用BX,SI,DI表示偏移地址时,默认段地址在DS中
使用BP表示偏移地址时,默认段地址在SS中

汇编运算符:
把内存单元ds:[0]作为字节单元还是字单元,依赖于另一个操作数是8位还是16位
存在疑问的操作:
mov ax,1000H mov ds,ax mov [0],5
mov ax,1000H mov ds,ax mov byte ptr [0],5
mov ax,1000H mov ds,ax mov word ptr [0],5

div和mul两个无符号乘除运算指令

mul乘法指令:
8*8 被乘数--->al 积:16位 在ax
16*16 被乘数--->ax 积:32位 规定在dx:ax

div除法指令:
mov ax, 1001 mov bl, 100 div bl
被除数--->ax, 除数 任意可用于保存的寄存器1
商在 al中,余数在ah中

汇编伪指令:db,dw,dd,dup
db 1,2,3 每个数据分配一个字节
dw 1,2,3 每个数据分配两个字节
dd 1,2,3 每个数据分配4个字节

原文地址:https://www.cnblogs.com/cymwn-com/p/10214614.html

时间: 2024-10-08 16:36:59

汇编语言程序设计 第5~8章概念梳理的相关文章

汇编语言程序设计 第2章概念梳理

汇编语言程序设计 第2章概念梳理 8086 14个寄存器: AX,BX,CX,DX (通用寄存器) SI,DI,BP,SP (基址和变址寄存器) CS,SS,DS,ES (段寄存器) IP,FLAGS (指令指针和标志寄存器) 通用寄存器: AX,BX,CX,DX通常用于存放一般性数据 称为通用寄存器 一般存储的数据范围为0 ~ 2^16-1 且为了与早期CPU操作兼容,这4个寄存器均可拆分成2个8位寄存器单独使用 {             AX分为AH和AL            BX分为B

汇编语言程序设计 第3章概念梳理

汇编语言程序设计 第3章概念梳理 基础概念部分:{ 字数据在内存当中的存储:高-高 低-低     字数据的低位字节存放在低地址内存单元     字数据的高位字节存放在高地址内存单元 取低地址内存单元地址作为字数据地址,例如数据124EH:    12H存储在偏移量为"2"的字节单元,4EH存储在偏移量为"1"的字节单元    则从地址为"1"的地址单元取出的一个字数据为124EH   12为高位,故存储在高位"2"单元,4E

《JAVASCRIPT高级程序设计》第三章

<JAVASCRIPT高级程序设计>第三章主要讲述了这门语言的基础概念,内容多而浅,通过思维导图可以帮助我们很好的理清脉络. js函数使用function关键字来声明,以下是一个简单的例子: 1 function sayHi(name, message){ 2 alert("hello," +name + message); 3 } 函数中可以使用return语句指定返回值,如果只有“return;”,则函数在停止执行后,将返回undefined; 定义的函数有2个参数,那

汇编语言程序设计读书笔记(3)- 程序范例

主要描述三方面的内容:第一是汇编语言的程序模版,以及模版涉及到的一些知识点:第二是如何调试汇编语言:第三是如何在汇编语言中调用C库函数. 1. 汇编语言的组成 汇编语言由段(section)组成,一个程序中执行的代码,叫文本段(text),程序还可能有定义变量,有付给初始值的变量放在数据段(data)中,没有赋初值或者付给零初值的放在bss段中.text段一定是要有的,data和bss可以没有. 2. 段的定义 用.section语法定义段.比如: .section .text定义文本段, .s

《80X86汇编语言程序设计教程》二十五 结语(读后感:这本书怎么样)

这本书的推荐星级是:5星.毕竟是经典书籍,没什么好说的. 就汇编本身而言,在编写高效率程序以及对程序的优化,调试,工程的逆向都是一门基础:就理论上的操作系统而言,汇编让你了解CPU,了解计算机的体系结构,它是阅读操作系统源码的前提,这也是<80X86汇编语言程序设计教程>做得比较好的一点,它对386的保护方式下的编程写得比较详实,读完整本书,会发现这学的不仅仅是汇编语言,还有CPU的体系架构,它让你基本猜测得到在编写基于80386CPU的操作系统时,大概要做一些什么事情. 阅读前,我选过几本书

javascript高级程序设计 第十四章--表单脚本

javascript高级程序设计 第十四章--表单脚本 在HTML中表单由<form>元素表示,在js中表单对应的是HTMLFormElement类型,这个类型也有很多属性和方法:取得表单元素的引用还是为它添加id特性,用DOM操作来获取表单元素:提交表单:把<input>或<button>元素的type特性设置为"submit",图像按钮把<input>元素的type特性设置为"image",也可以调用submit(

Javascript基本概念梳理

javascript里的数据类型: 原始类型:数字,字符串,布尔值.(原始值:null,undefined) 对象类型:键值对,数组,function,全局对象(MATH,JSON) 包装对象的概念: 字符串"aaa".len 字符串并不是对象,但是却可以调用它的属性,说明这只是一个临时对象,内部用new String()来创建的临时的. 原始类型是永远不可变的,所以可以比较他们的值,但是对象类型是可变的,不能比较他们的值. Javascript原型和继承: Javascript里每个

《AngularJS深度剖析与最佳实践》笔记: 第二章 概念介绍

第二章 概念介绍 2.1 什么是UI? 用户界面包括内容(静态信息+动态信息), 外观, 交互. 在前端技术栈中分别由HTML, CSS和JS负责. 进一步抽象, 分别对应于MVC三个主要部分: Model, View和Controller 对应到AngularJS中,  内容: 静态内容---模板 动态内容---scope 交互---Controller 外观 CSS----样式 filter----格式 2.2. 模块(module) 模块: 把相关的一组编程元素(如类, 函数, 变量等)组

[DOM Event Learning] Section 2 概念梳理 什么是事件 DOM Event

[DOM Event Learning] Section 2 概念梳理 什么是事件 DOM Event 事件 事件(Event)是用来通知代码,一些有趣的事情发生了. 每一个Event都会被一个Event对象所表示,这个对象可能还会有一些自定义的字段或者方法,来获取发生什么事情的更多信息. Event对象实现了Event接口(https://developer.mozilla.org/en-US/docs/Web/API/Event). 事件可以是任何事情,从最基本的用户交互,到renderin