汇编学习笔记(3)[bx]和loop

本文是《汇编语言》一书的学习笔记,对应书中的4-6章。

汇编程序的执行

要想将源代码变为可执行的程序需经过编译、连接两个步骤,WIN7操作系统下需要MASM程序来进行编译连接工作。将MASM和Debug安装在E:\Software\assembly目录下并新建code文件夹,创建汇编源程序1.asm,使用masm命令编译,link命令连接。

 1 ;演示的小程序
 2 
 3 assume cs:code
 4 code segment
 5     
 6     mov ax,1
 7     mov bx,2
 8     add ax,bx
 9     sub bx,1
10 
11     mov ax,4c00h
12     int 21h
13 
14 code ends
15 
16 end

 

汇编学习笔记(3)[bx]和loop_第1张图片

执行link命令后assembly目录下生成1.exe和1.obj两个文件,1.obj为编译过程中的目标文件,1.exe即可执行的二进制文件。1.obj中存储着远程需的描述信息,程序的大小、占用多少空间,当然还有翻译成机器码的源程序代码。

汇编学习笔记(3)[bx]和loop_第2张图片

生成1.exe可执行文件后,用debug命令跟踪调试程序。

汇编学习笔记(3)[bx]和loop_第3张图片

r命令查看寄存器信息,u命令查看内存中的程序代码。使用Debug加载程序后,ds存储程序开始的段地址,cs指向第一行代码。在ds和cs之间有一段大小为256字节的空间,称为程序段前缀,所以ds-cs=10H。

[bx]

[bx]表示将bx中的值(bx)作为偏移地址来表示一个内存单元,段地址在ds中,也可以显示的指定段地址即ds:[bx]。

loop

loop是循环指令,循环执行从标号开始的内容,下面是计算2^5的代码。

 1 ;演示2^5的小程序
 2 
 3 assume cs:code
 4 
 5 code segment
 6     
 7     mov ax,2
 8     mov cx,4
 9 s:  add ax,2
10     loop s
11 
12     mov ax,4c00h
13     int 21h
14 
15 code ends
16 
17 end

 

cx中存储的是循环次数,s是标号,执行到loop s会先将cx-1判断cx是否=0,若不等于0则执行s处代码。

你可能感兴趣的:(学习笔记)