第六章 包含多个段的程序
在代码段中使用数据
end除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方
start: 程序的第一条指令 … end start
在代码段中使用栈
在描述dw的作用时,可以说用它定义数据,也可以说用它开辟内存空间
dw:define word
格式:[变量名] dw 数据1,数据2,… 功能:定义的是字型数据
说明:变量名可有可无,表明所定义的第一个字节的偏移地址 举例:data_word dw 100,100h
db:define byte
格式:[变量名] db 数据1,数据2,… 功能:定义的是字节型数据 举例:data_byte db 10,10h
将数据、代码、栈放入不同的段中
在代码段中使用数据和栈,存在的问题: 程序显得混乱
如果数据、栈和代码需要的空间超过64KB,就不能放在一个段中。 解决:定义多个段,将数据、栈和代码放到不同的段中。
定义多个段的方法:和定义代码段的方法一样 对段内数据的引用
段名相当于一个标号,代表了段地址。 偏移地址看数据在段中的具体位置 代码段、数据段、栈段是人为的安排。
第七章 更灵活的定位内存地址的方法
AND :逻辑与指令
格式:AND 目的操作数,源操作数
功能:按位进行与运算,结果放到目的操作数 例如:mov al,01100011b and al, 00111011b 执行后 al=00100011b
OR :逻辑或运算
格式:OR 目的操作数,源操作数
功能:按位进行或运算,结果放到目的操作数 例如:mov al,01100011b or al,00111011b 执行后 al=01111011b
NOT:逻辑非 格式:not 操作数 功能:按位进行非运算 例如:mov al,01100011b not al
执行后, al=10011100b
XOR:逻辑异或(相同为0,不同为1) 格式:xor 目的操作数,源操作数 功能:按位进行异或运算 例如:mov al,01100011b xor al,00111011b 执行后, al=01011000b
大小写转换问题
一个字母不管它原来是大写字母还是小写字母,将它二进制形式(ASCII码)的第五位置为0,它就必将变为大写字母;将它的第五位置为1,它就必将变为小写字母.