随笔分类 - AssemblyLanguage
摘要:exe可执行文件 通过link可以获得最终的exe文件 系统要运行exe文件的话 需要分配给他一段内存 系统是怎么知道要分配多大的内存给这个程序的? 也就是这个exe文件 因为exe文件中 除了我们整个程序的代码还包括了一些信息(文件有多大 程序的入口在哪里)描述信息 系统就是通过这些描述信息对寄存
阅读全文
摘要:编译和链接 编译masm:将asm文件变成obj 文件 链接link:obj变成exe 问什么要经过两次才变成exe 假设有100w行代码 编译器是翻译软件 需要编译一段时间 100w行要翻译5min 代码是会有错误的 去修改几行代码 不合适 100w行代码拆分开 t1.asm ->obj t2.a
阅读全文
摘要:承上启下 我们可以在一段内存中存放数据 数据段 存放了我们自己定义的数据 我们还可以在一段内存中存放指令 指令段(代码段) 存放了我们自己定义的指令 我们可以将一段内存定义成栈空间 因为我们处理数据的时候需要临时性存放 栈段 我们如何让CPU按照我们的安排去访问这些内存段呢? 对于数据段来说,段地址
阅读全文
摘要:call 指令 将 IP(000B) 保存到哪里去了(内存的哪里 ) ret 可以拿回(存在栈中 注意 sp 的变化) 栈的作用: 1、临时性保存数据 mov ax,1000H mov bx,2000H push ax push bx ;注意入栈顺序 mov ax,0 mov bx,0 pop bx
阅读全文
摘要:栈 箱子 箱子画在哪里是我决定的 箱子的容量大小也是我决定的 我们可以决定栈顶标记在哪里 栈在哪里(箱子在哪里) 栈的大小(箱子的大小) SP=10H 16byte=8个字型数据 push可以操作8次 栈是如何设置的: (建议设置成16的倍数)自己的一个约定 防止一些稀奇古怪的问题 起始地址+你说设
阅读全文
摘要:栈的概念的前言 栈是一段连续的内存单元,也就是一段连续的内存地址 非常专业的名字 特殊在访问形式上 这是和mov移动指令 区别最大的地方 mov ax,1000H mov ds,ax mov ax,[0] mov ax,[2] 栈的概念——实际例子角度 1、栈顶标记 标记了 箱子中最上面这本书的 在
阅读全文
摘要:检测点3.1 (1) 寄存器是互相独立的 (2)内存中的情况如图3.6所示 各寄存器的初始值: CS=2000H, IP=0, DS=1000H, AX=0, BX=0; ①写出CPU执行的指令序列(用汇编指令写出) CS:IP 2000H*10H+0=20000H 物理地址 20000H对应指令—
阅读全文
摘要:小结 字节型数据 字型数据 在内存中的存放 字型数据在内存中存储时,需要两个地址连续的内存单元存放,字型数据的高位字节存放在高地址中,低位字节存放在低地址 mov add sub 实验 注意数据的长度 内存中的排列不同 eg: 字节型数据 01 字型数据 01 00 ds 段地址寄存器 数据段地址寄
阅读全文
摘要:字节型数据和字型数据 问题3.3 写出下面的指令执行后 寄存器 ax,bx,cx中的值 mov ax,1000H mov ds,ax 前面这两条指令,修改了段地址寄存器DS中的值,也就是确认了你内存地址中的段地址 物理地址 内容 mov ax,ds:[0] cpu从这个内存地址 读取了一个字型数据,
阅读全文
摘要:CPU通过内存地址去访问内存 我们学的是8086CPU 通过段地址和偏移地址 DS 段地址寄存器 访问数据用的 mov al,ds:[0] mov移动指令 CPU中的AL寄存器,内存地址(冒号左边ds段地址寄存器:冒号右边是偏移地址) 两个方括号是将段地址ds和偏移地址进行组合得到的物理地址,得到里
阅读全文
摘要:第三章 寄存器(内存的访问) 问题: call指令将IP(000H)保存到哪里去了(内存的哪里) ret可以拿回 通过观察和思考 去猜测设计者为什么设计 ,积累了足够的经验 debug U R T D E 数据长度? 字节型数据 字型数据 2byte 字节型数据和字型数据 一个字型数据 存放在内存中
阅读全文
摘要:要把CS:IP指向2000:0
阅读全文
摘要:承上启下 寄存器 数据寄存器 AX BX 也可以被当作偏移地址寄存器 CX CX也有其他作用 DX AX,DX用来处理数据的 通用寄存器 地址寄存器——》分为段地址寄存器和偏移地址寄存器 标志位寄存器 AX,BX,CX,DX 都是16位寄存器 可以各自分为两个互相独立的八位寄存器 AX=AH+AL…
阅读全文
摘要:r 可以查看CPU中所有寄存器中的内容,它还将CS:IP所指向的机器码翻译成汇编指令,还可以改变寄存器中的内容 d 可以查看内存中的内容 ASCII编码 数字符号 英语字母 标点符号 128个字节 -d 1000:9 表示查看从9开始的128个字符 u 可以将内存中的机器指令翻译成汇编指令 -u 1
阅读全文
摘要:汇编指令 jmp——》jump jmp是转移指令,可以修改CS,IP这两个寄存器 决定CPU从哪里读取指令 jmp 2000:0 jmp 寄存器 若想同时修改CS、IP的值可以用形如“jmp 段地址:偏移地址”的指令完成,功能:用指令中给出的段地址修改CS,偏移地址修改IP如: jmp 2AE3:3
阅读全文
摘要:CPU中的CS段地址寄存器 和 IP这个偏移地址寄存器 组合的时候从中读取内容 当做指令来执行 指令是有长度的 一条指令可以由多个字节构成 指令的执行过程: 1、CPU从CS:IP所指向的内存单元读取指令,将读取的指令存放到指令缓存器中 2、IP=IP+所读指令长度,从而指向下一条指令 3、执行指令
阅读全文
摘要:u指令 将某个内存地址开始的字节全部当做指令 d指令 将某个内存地址开始的字节全部当做数据 段地址寄存器 (CS,DS,SS,ES) 偏移地址寄存器(IP,BX,SP,BP,SI,DI) IP寄存器和指令有关 debug -r -r ds -r es -r ss -r cs 8086CPU中,在任意
阅读全文
摘要:段地址X16+偏移地址=物理地址, 因为8086CPU有20根地址线,16位寄存器无法表示,所以采取这么一个方式 第一张只能填3位数字的纸条 第二 张只能填3位数字的纸条 物理地址 210 X 10 726 2826 220 X 10 626 230 X 10 526 190 X 10 926 18
阅读全文

浙公网安备 33010602011771号