想要完整的描述一个内存单元,须要两个条件:1.内存单元的地址 2.内存单元的长度(类型)。
首先讲一下[0]的含义,[0]表示的内存单元,偏移地址为一个当即数0,段地址默认保存在DS寄存器中(以前的文章中讲到过,经过DS寄存器和偏移地址(ds:[0])就能够肯定内存中的一个地址)。
说完[0]再回头来讲[bx],[bx]表示的依然是偏移地址,可是它不是一个当即数了,而是保存在一个寄存器中,段地址仍是默认保存在DS寄存器中。编程
loop指令的格式是:loop 标号,CPU执行loop指令的时候,要进行两部操做,第一步:cx = cx - 1 第二步:判断cx中的值,不为零则转至标号处执行程序,若是为零则向下执行。从这两步咱们能够看出loop指令的执行结果受到cx中值的影响,一般状况下,咱们使用loop指令来实现循环功能,cx中存放loop指令须要循环的次数。框架
在汇编语言中,包含两种指令,一种是汇编指令,另外一种是伪指令,汇编指令是对应着机器码,能够直接被编译为机器指令被CPU执行,而伪指令不会被CPU执行,它是用来让编译器进行相关的编译工做。
(1)segment
segnment和ends是一对成对使用的伪指令,用于定义一个段,segnment用于声明一个段开始,ends用于声明一个段结束,使用格式为:oop
段名 segnment 段名 ends
好比用codesg为段名声明一个用于存放数据的段:code
codesg segnment codesg ends
一个汇编程序由多个段造成,这些段用来存放代码、数据或者看成栈空间使用,一个有意义的汇编程序至少要有一个段用于存放代码。内存
(2)end
end指令是一个汇编程序的结束标记,编译器在执行汇编程序的时候若是碰到end就结束对源程序的编译。编译器
(3)assume
assume是假设的意思,它用于假设某一个寄存器和程序中的某一段相关。好比:
assume cs:codesg
就是将代码段codesg和CPU的段寄存器cs联系在一块儿。编译
再来说讲标号,除了汇编指令和伪指令之外,还有标号,一个标号指代一个地址。好比codesg segment,这个codesg最终将被处理为一个段的段地址。循环
接着来分析一段求2的10次方汇编程序程序
assume cs:code code segment mov ax,2 mov cx,9 s: add ax,ax loop s mov ax,4c00h int 21h code ends end
分析:
先来看一下总体框架数据
接着分析中间部分
最后的 mov ax,4c00h和 int 21h暂时先无论 这样就将2的10次方的值保存在ax中了。