汇编语言(王爽) 第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中的内存单元的内容给ax

也就做一个下面的很简单的程序

5.2 loop

循环

s为标号,代表指令的地址

loop s执行的过程就是1 cx-- ,2 判断cx是不是0,不是的话跳到S标号出执行,是0的话直接执行下面的语句

5.3 都是实践的,直接写代码了

5.4 编译器中内存单元的写法

mov ax,[0]在编译器中会解释成mov ax,0

mov ax,[bx]和mov ax, ds:[bx]都会解释成把段地址ds*16+bx中的偏移地址所代表的物理地址中的内容给ax寄存器

5.5 loop和[bx]的联合应用

这里唯一要注意的就是8位的数据加到16位寄存器的方法

这里用土办法

mov ah,0

mov al,ds:[0]

mov bx,ax

用一个寄存器的高位设0,低位接收数据,再赋给另一个寄存器

5.6 段前缀

mov ax,ds:[0] ds就是段前缀

就是ds,cs,ss,es这些东西,出现在指令中,指明段地址的东西称为段前缀

5.7 段安全空间

有些内存是不可写的,写的话会报错

不要去手动改内存的内容

程序运行的时候,cpu会自动给程序分配内存

扯淡完毕

EOF

时间: 2024-10-08 14:09:37

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

王爽《汇编语言》第三版 第五章 [BX]和loop指令

5.1 [bx] mov ax,[bx]功能:bx 中存放的数据作为一个偏移地址EA ,段地址SA 默认在ds 中,将SA:EA处的数据送入ax中. 5.2 Loop指令 指令的格式是:loop 标号,CPU 执行loop指令的时候,要进行两步操作: 1.(cx)=(cx)-1: 2.判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行. 通常我们用loop指令来实现循环功能,cx 中存放循环次数. 5.3 在Debug中跟踪用loop指令实现的循环程序 5.4 Debug和汇编编译器

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

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

汇编语言学习第五章-[BX]和loop指令

本博文系列参考自<<汇编语言>>第三版,作者:王爽 1.[bx]和内存单元的描述 [bx]与我们前面见过的[0]类似,mov ax,[0] 的意思是将内存地址为DS:0的两字节内容存入ax中.其中[0]中的0代表的是偏移地址. 类似的,我们有 mov al,[0]的意思是将内存地址为DS:0的单字节内容存入al中.那么我们可以大胆的推断mov ax,[bx]代表的是将偏移地址为bx寄存器中的值的内存地址的两字节内容存入到ax中,其段地址在DS中存储. 2.关于定义的描述性符号: &

汇编语言:第五章 [BX]和loop指令

1.[bx]与内存单元 [bx]是指 段地址在DS中,偏移地址在bx中的内存单元 2.loop 用于描述循环 3.我们定义的描述性符号 "()" 寄存器: (ax/al)表示ax/al寄存器中的内容 段寄存器:   ((ds)*16+(bx))表示段地址为ds内容,偏移地址为bx内容的内存单元的内容 内存单元:   (20000H)表示20000H内存单元中的内容 4.约定符号idata表示常量 mov ax,idata 表示mov ax,1 mov ax,2 等 mov ax,[id

‘第五章 [BX]和loop指令

<1>[BX] 想要完整地描述一个内存单元,需要两种信息:(1)内存单元的地址(2)内存单元的长度(类型).[BX]和[0]有些相似,表示一个内存单元,它的偏移地址在bx中.指令mov ax,[bx]的功能为将bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处的数据送入ax中,即(ax)=((ds)*16+(bx)).ps:此处的()表示的为括号内寄存器或者内存单元的内容. <2>Loop指令 loop在英语中有循环的含义,所以这个指令应该和循环有关.lo

汇编语言(王爽) 第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

汇编语言(王爽) 第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的意思在右边是

汇编语言(王爽) 第10章 call和ret

这2个指令也是转移指令,一起用的时候有特效~~~~ 10.1 ret and retf ret 相当于pop ip 把栈顶的字弹出到ip retf相当于先执行pop ip and pop cs 10.2 call 执行2步 1 先把IP或cs和ip推入栈中 2 转移到 标号或内存处 10.3 call 标号 call 标号 转移范围为-32768-32767 16位转移 相当于执行 push ip jmp near ptr 标号 10.4 call far ptr 标号 相当于 push cs

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

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