汇编笔记3(数据)
第7章(更灵活定位内存):
and ah,10011010B 与运算(一0则0)可以把操作位设为0(11111101把第7位设为0)
or ah,10010010B 或运算(一1则1)可以把操作位设为1(00000010把第7位设为0)
'......'的方式表示ASCII码给出
db '1234' = db 31h,32h,33h,34h
[bx+idata]访问偏移地址 其他写法[idata+bx],idata[bx],[bx].idata,[bx][si],[si][bx](注意常数在后有.)
[bx+idata]方便数组访问,idata确定元素开头,dx作为相对地址变化。例:
[0+bx] 'abcde' 0[bx]
[5+bx] 'fghij' 5[bx]
si和di,作为bx的补充,性质相同
[bx+si+idata]类似[bx+idata]
需要暂存数据都采用栈的方法(ss栈段)
另:1.字母大小写相差20h
2.利用and or 和第5位来决定大小写
3.采用0[] 8[]这种形式可以只使用一个偏移寄存器提高效率
基础复习:
1.一个内存单元8bit,表示为两位16进制数,一个字节8bit。
2.不能直接把内存mov到内存
实际操作暴露的问题:
1.能操作数值的就是几个寄存器,没有变量
2.采用的寄存器不同(ax,al)一次读取的内存不同,地址所需偏移不同。
3.tap和空格产生同样对齐效果但占用内存不同
4.要双层循环应当先把cx临时存在其他地方(尽量不要在寄存器,栈),内层循环后再带回
第8章(数据处理):
reg表示寄存器,sreg表示段寄存器
[bx]寻址形式的只有bx,bp,si,di可用(8086),bx与bp,si与di不共存
bp默认段地址为ss,bx默认段地址ds。。。可以显式指定
数据位置:1.idata立即数 2.寄存器 3.内存
指明数据长度方法:
1.根据转移的寄存器确定
2.X ptr 例:inc word ptr [bx]
3.命令默认:push字
数据操作过程:确定位置,确定类型(长度),修改
汇编上的结构体:bx定位整个结构体,idata定位某一数据项,si定位数组项元素
div:除法 被除数位数16(32),除数位数8(16)(div reg或者div 内存单元)
被除数为ax 除数为8位(决定类型),al存商,ah存余
被除数为 dx放高16位,ax放低16位 除数为16位(决定类型),ax存商,dx存余
dup:类型 重复次数 dup(重复内容)例:db 3 dup(1,2)===>db 1,2,1,2,1,2
实际操作的问题:
1.div后面不能直接接除数,要存在寄存器中(除数位数由此决定)使用。
2.一个偏移地址只决定一个内存单元
3.出现结果不写入时,先检查分配内存是否包含