摘要: 在汇编指令中,通过以下方式指定指令要处理的数据的长度 1) 通过寄存器名指明要处理的数据的尺寸。 例如ax是字操作,al是字节操作 2)没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte。 例如 mov word ptr sd:[0], 1 字单元 阅读全文
posted @ 2018-11-06 17:08 迷心迷 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 8086CPU中,只有bx,bp,si,di这4个寄存器可以用在[...]中进行内存单元的寻址。 这4个寄存器可以单个出现,或只能以4中组合出现:bx+si,bx+di,bp+si,bp+di。 只要在[...]中使用寄存器bp,而指令中没有显性的给出段地址,段地址默认在ss中。 阅读全文
posted @ 2018-11-06 16:58 迷心迷 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 1、8086的寻址方式 [idata]用一个常量来表示地址,可用于直接定位一个内存单元 [bx]用一个变量来表示内存地址,可用于间接定位一个内存单元 [bx+idata]用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存单元 [bx+si]用两个变量表示地址 [bx+si+id 阅读全文
posted @ 2018-11-06 16:51 迷心迷 阅读(396) 评论(0) 推荐(0) 编辑
摘要: si和di是8086CPU中和bx功能相近的寄存器,si和di不能够分成两个8位寄存器来使用。 用si和di实现将字符串"welcome to masm!"复制到它后面的数据区中。 阅读全文
posted @ 2018-11-06 16:38 迷心迷 阅读(416) 评论(0) 推荐(0) 编辑
摘要: 将datasg中的第一个字符串转化为大写,第二个字符串转化为小写。 如果两个字符串的长度一致,程序可以使用[bx+idata]的方式优化如下: 阅读全文
posted @ 2018-11-06 16:25 迷心迷 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 1、在代码段中使用数据 dw即“define word”,使用dw定义了8个字型数据。这8个数据是在代码段的偏移0、2、4、6、8、A、C、E、处。程序运行时,它们的地址就是CS:0, CS:2,CS:4,CS:6,CS:8,CS:A,CS:C,CS:E。 也就是说从CS:10H开始才是汇编指令对应 阅读全文
posted @ 2018-11-06 14:16 迷心迷 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 我们需要直接向一段内存中写入内容; 这段内存空间不应存放系统或其他程序的数据或代码,否则写入操作很可能引发错误; DOS方式下,一般情况,0:200~0:2ff空间中没有系统或其他程序的数据或代码; 以后,我们需要直接向一段内存中写入内容时,就使用0:200~0:2ff这段空间。 阅读全文
posted @ 2018-11-06 12:10 迷心迷 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 我们在Debug和源程序中写入同样形式的指令 : "mov al,[0]","mov bl,[1]","mov cl,[2]","mov dl,[3]",但Debug和编译器对这些指令中的"[idata]"却有不同的解释。Debug将它解释为"[idata]"是一个内存单元,"idata"是内存单元 阅读全文
posted @ 2018-11-06 11:49 迷心迷 阅读(202) 评论(0) 推荐(0) 编辑
摘要: CPU执行Loop指令时,要进行两步操作: (cx)=(cx)-1 判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行 通常我们用loop指令来实现循环功能,cx中存放循环次数。 用cx和loop指令向配合实现循环功能的程序框架如下: mov cx,循环次数 s: 循环执行的程序段 lo 阅读全文
posted @ 2018-11-06 11:02 迷心迷 阅读(897) 评论(0) 推荐(0) 编辑
摘要: mov ax,[bx] 功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处的数据送入ax中。即(ax)=((ds)*16+(bx))。 mov [bx],ax 功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将ax中的数据送入内存SA:EA处。即: 阅读全文
posted @ 2018-11-06 10:56 迷心迷 阅读(541) 评论(0) 推荐(0) 编辑