汇编语言(王爽) 第6章包含多个段的程序

程序到了内存中我们分为code(代码)段,也就是大部分指令段,数据段,栈

6.1 在代码段中使用数据

上图 dw表示define word定义一个字,16位

会出现cs执行的前16位是数据段,后面才是指令,所以要把IP设成10h

或者直接在第一条指令前面在start,再在最后面的end start

程序运行的第一条不是汇编指令可能会报错把

6.2 在代码段中使用栈

这的题目都是从内存单元的数据换到另一个内存单元

开始奇怪,为啥不直接换,还要专门定义一个栈空间出来做个中间体

查了资料才知道,内存单元的内容是不能直接和内存单元的互换的

6.3 将数据,代码,栈放入不同的段

这里才真正看懂了汇编的雏形

code部分,开始结束

data部分,开始结束

stack部分,开始结束

分别代表了指令,数据和栈。优雅~~~~~~~~

下面都是些栗子,我自己打打练练手,就不放了

EOF

时间: 2024-10-12 11:40:48

汇编语言(王爽) 第6章包含多个段的程序的相关文章

汇编语言学习第六章-包含多个段的程序

本博文系列参考自<<汇编语言>>第三版,作者:王爽 在前面的介绍的程序中只有一个代码段.那么如果我们需要将代码,数据分别存储在不同的内存空间应该怎么办呢?我们知道我们不可能随便使用任何一段内存空间,因为我们这段内存地址空间可能存储着非常重要的内容.其实,这只是我们考虑的太多啦,一旦我们将程序载入内存后,操作系统为我们分配的用于程序运行的内存空间都是安全的,绝对不会与其他程序的内存空间相重叠的. 往往程序获取内存有两种方式:一种是在程序载入内存的时候操作系统已经分配好的内存空间,另外

王爽《汇编语言》第三版 第六章 包含多个段的程序

6.1 在代码段中使用数据 "dw"的含义是定义字型数据.dw即define word. 由于它们在代码段中,程序在运行的时候CS中存放代码段的段地址,所以我们可以从CS中得到它们的段地址. 因为用dw定义的数据处于代码段的最开始,所以偏移地址为0,这8 个数据就在代码段的偏移0.2.4.6.8.A.C.E处. end 除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方. 6.2 在代码段中使用栈 6.3 将数据.代码.栈放入不同的段 我们用和定义代码段一样的方法来定义多个

汇编语言(王爽) 第7章 寻址方法

这章讲一些寻址方法,对前面寻址方法的总结把 7.1 and or 2个指令 上栗子 mov al,00001111b and al,11110000b al=00000000b mov al,00001111b or al,11110000b al=11111111b 7.2 ASCII码 之前就写过一篇ACSII码的,这里主要写下我们在键盘上按键再输出到屏幕的过程 我们在键盘上按下a键 这个信息被传到计算机,计算机用ASCII码对它编码,成为61h, 再扔到一个内存段中 文本编辑器把内存中的6

汇编语言(王爽) 第4章 第一个程序

这章算是一个实践部分把,写 了一个汇编程序,并用debug去跟踪每条指令的进程,看寄存器和内存的变化,算是对之前的一个小总结把 4.1 源程序到执行的过程 一个汇编程序写好,要编译成目标文件,文件后缀是obj的,再链接形成exe后缀的,再接着去执行 4.2 源程序 直接上图把 伪指令由编译器执行,汇编指令由CPU执行 assume是伪指令,关联段寄存器和程序中用segment and end代表的段关联 segment 和ends表示段的开始和结束 end表示整个程序结束 另外程序会有个叫程序返

汇编语言(王爽) 第1章基础知识

1.1 机器语言 机器语言就是机器指令的集合.机器指令是啥呢?就是一列二进制的数据,计算机把它转成高低电平,使计算机的其他器件驱动并运算.(计算机如何使用2进制语言?) 早期程序都是用机器语言写的,但是有个问题就是太麻烦,数据信息太长,写错一个0或1就会来BUG了. 这种机器语言根本不是人写的,注定会被淘汰. 1.2 汇编语言 这个时候,汇编语言就挺身而出. 汇编语言就是机器语言的便于记忆的格式把 一个指令1000100010001000 表示把寄存器A1的内容弄到寄存器A2上.如下 操作介绍:

汇编语言(王爽) 第11章 标志寄存器

这里讲一个特殊的寄存器,flag 先看flag的16位显示 11.1 zf 指令执行后,结果0,ZF=1 指令执行后,结果不为0,ZF=0 11.2 pf 指令执行后,所有bit位中1的个数是否位偶数,若为偶数,那么pf=1 若为奇数,pf=0 11.3 sf 指令执行后,结果负,SF=1 指令执行后,结果不为负,SF=0 11.4 cf 进位 若出现进位,那么CF=1 没有的话CF=0 11.5 of 溢出, 数字的溢出. 8位范围是-128-127 若130就是溢出了 11.6 abc指令

汇编语言(王爽) 第2章 寄存器

CPU由运算器,控制器,寄存器等器件组成 汇编指令可以操作寄存器中的数据.如mov AX,BX就是把寄存器BX中的值加上寄存器AX中的值,再把结果放在AX上 8086CPU的寄存器的有14个,这里就讲AX,BX,CX,DX,CS,IP这么几个先 2.1通用寄存器 就是指AX,BX,CX,DX 用来存放一般数据 如AX是16位,但是8086CPU之前的一代是8位的,所以AX分为AH,AL来兼容之前版本的数据 同理 BX,CX,DX.另外AH的H是high的意思,在左边高位,L是low的意思在右边是

汇编语言(王爽) 第3章寄存器(内存访问)

3.1 内存中的字 内存中的字是16位的,以2个内存单元存储 地址大的存高位(字的左边8位),地址小的存低位(字的右边8位) 字单元:存放1个字形数据的内存单元,由2个内存单元组成,共16位 3.2 DS 一个寄存器的名字,用来放数据段的段地址 mov 指令可以把数据转到寄存器,一个寄存器的内容转到另一个寄存器,内存单元(字单元)转到寄存器 但是一般会mov ax,1000h;mov ds,ax而不是直接mov ds,1000h 因为8086CPU不支持直接把内存单元的东西转到段寄存器上面 3.

汇编语言(王爽) 第5章[BX]和loop指令

mov ax,[0] 把一个内存单元给寄存器ax,内存单元长度2个字节,偏移地址0,段地址ds mov al,[0] 把一个内存单元给寄存器al,内存单元长度1个字节,偏移地址0,段地址ds so:要描述一个内存单元,需要1.ds和偏移地址2.内存单元长度 [bx]也表示一个内存单元,偏移地址在寄存器bx中罢了 我们用()表示一个寄存器或一个内存单元中的内容 ()中可以是寄存器,段寄存器,内存单元的物理地址 5.1 [bx] mov ax,[bx] 把段寄存器ds和偏移地址在bx中的内存单元的内