1.[bx]和内存单元的描述
要完整地描述一个内存单元,需要两种信息:一、内存单元的地址;二、内存单元的长度(类型)。
[bx]表示一个内存单元,它的偏移地址在bx中。
loop有循环的含义,这个指令和循环有关。
约定符号idata表示常量,如mov ax,[idata]代表mov ax,[1]、mov ax,[2]
mov bx,idata代表mov bx,1、mov bx,2
这些都是非法指令。
inc bx的含义是bx中的内容加1。对应的dec bx表示bx中的内容减1
2.Loop指令
loop指令的格式是:loop 标号,CPU在执行loop指令的时候,要进行两步操作,一、(cx)=(cx)-1;二、判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。
cx的值影响着loop指令的执行。
loop指令如下段
mov cx,11
s:add ax,ax
loop s
执行loop s时,首先要将(cx)-1,然后若(cx)不为0,则向前转至s处执行add ax,ax。所以,可以利用cx来控制add ax,ax的执行次数。
3.在debug中跟踪用loop指令实现的循环程序
大于9FFFH的十六进制数据A000H、A001H...C000H、C001H...FFFEH、FFFFH等,在书写的时候都是以字母开头的。而在汇编源程序中,数据不能以字母开头,所以要在前面加0。
debug中可以执行用g命令使程序能够一次性执行完;在debug遇到loop指令时,可以使用p命令,debug就会自动重复执行循环中的指令,直到(cx)=0为止。
4.debug和汇编编译器masm对指令的不同处理
debug和编译器masm对形如“mov ax,[0]”这类指令在解释上是有不同的,分别在debug和源程序中写入同样指令:如“mov al,[0]”,但debug和编译器对这类指令中的“[idata]”却有不同的解释。debug将它解释为“[idata]”是一个内存单元,“idata”是内存单元的偏移地址;而编译器将“[idata]”解释为“idata”。
在汇编源程序中,我们要用bx来间接地给出内存单元的偏移地址,可是比较麻烦,如果要像在debug中那样,在“[]”中直接给出内存单元的偏移地址。这样做,在汇编源程序中也是可以的,只不过,要在“[]”的全面显式地给出段地址所在的段寄存器。比如我们可以这样访问2000:0单元:
mov ax,2000H
mov ds,ax
mov al,ds:[0]
在汇编源程序中,如果用指令访问一个内存单元,则在指令中必须用“[...]”来表示内存单元,如果在“[]”里用一个常量idata直接给出内存单元的偏移地址,就要在“[]”的前面显式地给出段地址所在的段寄存器。
5.loop和[bx]的联合应用
在实际编程中,经常会遇到,用同一种方法处理地址连续的内存单元中的数据的问题。我们需要用循环来解决这类问题,同时我们必须能够在每次循环的时候按照同一种方法来改变要访问的内存单元的地址。这是我们就不能用常量来给出内存单元的地址,而应用变量。
6.段前缀
类似于mov ax,ds:[0];mov ax,cs:[0]这些出现在访问内存单元的指令中,用于显式地指明内存单元的段地址的“ds:”“cs:”“ss:”“es:”,在汇编语言中称为段前缀。
7.一段安全的空间
在一般的PC机中,dos方式下,dos和其他的合法的程序一般都不会使用0:200~0:2ff(00200h~002ffh)的256个字节的空间。所以,我们使用这段空间是安全的。不过为了谨慎起见,在进入dos后,我们可以先用debug查看一下,如果0:200~0:2ff单元的内容都是0的话,则证明dos和其他合法的程序没有使用这里。
8.段前缀的使用
具体见书
- [游客] 石职wsd专升本da卡 11/18 15:28
- [游客] 石职wsd专升本da卡 11/18 15:28
- [游客] 似乎这个站点没有什么新鲜的活力了 07/23 18:22
- [游客] 博主有没有学习群 07/23 19:14
- [游客] 可以的 07/23 19:13
- [游客] aaaaaaaaaaaa 09/19 13:49
- [jinshuwen] 很有收获! 01/19 16:25
- [hujie0421] 谢谢分享 02/01 05:14
- [jiejie] 来学习一下 10/01 11:31
- [yexueyao] 谢谢,我是学习计算机专业的,汇编语言一学期几乎没听懂过,看你的日记,很有帮助,我会加油学的,期末要拿 11/12 10:14
- [游客] 嘉義定點外約Line: a57963#嘉義學生妹外約 桃園中壢外送茶Line: a57963#中壢外 11/29 15:39
- [游客] 嘉義定點外約Line: a57963#嘉義學生妹外約 桃園中壢外送茶Line: a57963#中壢外 11/29 15:39
- [游客] 嘉義定點外約Line: a57963#嘉義學生妹外約 桃園中壢外送茶Line: a57963#中壢外 11/29 15:38
- [游客] 嘉義定點外約Line: a57963#嘉義學生妹外約 桃園中壢外送茶Line: a57963#中壢外 11/29 15:38
- [bingfeixue] masm32 汇编器具体怎么用啊 04/28 09:24