本系列文章参考汇编语言第四版和汇编语言程序设计 贺利坚主讲整理而成
CS:IP寄存器是定位代码段位置的
在Debug中直接写入指令编写 的汇编程序
单独编写成源文件后再编译为可执行文件的程序
; —注释
这一节主要来看看程序加载进内存后的执行过程:
assume cs:codesg
codesg segment
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4c00H
int 21H
codesg ends
end
masm test.asm;
link TEST;
DS寄存器存放的数据段的段地址,CS指向代码段的段地址
功能:实现循环(计数型循环)
指令的格式: loop 标号
CPU 执行loop指令时要进行的操作
① (cx)=(cx)-1;
②判断cx中的值 不为零则转至标号处执行程序 如果为零则向下执行。
要求:
LOOP指令执行会跳转到指定地址处,然后对应的IP寄存器值也会被改变,并且cs值会不断减去一,直到为0时,退出循环
不能写成add dl al,因为会产生溢出,add dx al更不行
如果不明确指定,那么[0]就表示ds:[0],如果明确指定了,像上面es:[bx],那对应的段地址就默认按照es寄存器中的值为准
计算机中每一块地址应该用来做什么都是会提前由操作系统规定好的,如果我们随意乱放数据,例如: 我们将数据存放到存放着中断指令的内存位置处,那么不就出大问题了吗?
数据并非只能存放在数据段中,也可以存放在代码段和栈段中
上面程序的问题在于,我们将数据放在了代码段的前面,占据了16个字节大小,那么真正的程序代码应该从第17个字节开始,那么就会出现将数据当做指令执行的问题,看下面的例子:
除了CS寄存器不需要初始化之外,栈相关寄存器和数据段寄存器都需要手动初始化一下
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://cjdhy.blog.csdn.net/article/details/125340815
内容来源于网络,如有侵权,请联系作者删除!