2011年6月23日
摘要: 压缩BCD码调整指令语法格式: DAA ; 调整AL中的和为压缩BCD码 DAS ; 调整AL中的差为压缩BCD码功能描述: DAA:通常先执行ADD/ADC指令,将2个压缩BCD码相加,结果存放在AL中。然后使用该指令将AL调整为压缩BCD码格式。 DAS:通常先执行SUB/SBB指令,将2个压缩BCD码相减,结果存放在AL中。然后使用该指令将AL调整为压缩BCD码格式。对标志位的影响:OF不确定;CF反映压缩BCD码相加/相减的进位/借位状态;按一般规则影响SF和ZF。说明:若使用DAA/DAS指令,则参加加法/减法运算的操作数应该是压缩BCD码。如果将任意2个二进制数相加/减,然后调整, 阅读全文
posted @ 2011-06-23 20:58 Jiang, X. 阅读(6919) 评论(0) 推荐(0) 编辑
摘要: 汇编这样可以直接读写内存的程序也需要用到变量。但它不像其它高级语言那样把变量分成许多类型,它是按照变量的长度来区分的,所以定义(define)变量时就用5个不同的关键字:DB,DW,DD,DQ,DT(事实上常用的只有DB,DW)DB(DEFINE BYTE)即定义的变量占一个字节的长度(也可以说把定义的变量值放入一个字节的内存空间)如:a DB 7h ;意思是将7h放入内存的某一个字节(空间)中,然后让变量a指向这个字节也可以这样:a DB 'h' ;虽然‘h’是个字符但存入内存却成了它对应的ASCII码48h你也可以用DB来定义数组,如:a DB 48h, 65h, 6Ch, 阅读全文
posted @ 2011-06-23 20:25 Jiang, X. 阅读(15460) 评论(0) 推荐(2) 编辑
摘要: 比如你用local在栈上定义了一个局部变量LocalVar,你知道实际的指令是什么么?一般都差不多像下面的样子: push ebp mov esp, ebp sub esp, 4 现在栈上就有了4各字节的空间,这就是你的局部变量。 接下来,你执行mov LocalVar, 4,那么实际的指令又是什么?是这样: mov dword ptr [ebp-4], 4 于是,这个局部变量的“地址”就是ebp-4——显然,它不是一个固定的地址。现在需要将它的“地址”作为参数传给某个函数,你这样写: invoke/call SomeFunc, add... 阅读全文
posted @ 2011-06-23 11:25 Jiang, X. 阅读(808) 评论(0) 推荐(0) 编辑
摘要: 字符串操作指令 汇编语言中,串操作指令LODSB/LODSW是块装入指令,其具体操作是把SI指向的存储单元读入累加器,LODSB就读入AL,LODSW就读入AX中,然后SI自动增加或减小1或2.其常常是对数组或字符串中的元素逐个进行处理。例如:驻留程序使用 "base memory size in KB" of BIOS Data Area (0040h:0013h)给自己程序开辟2K内存,程序可以这样实现:push esmov si,0413h ; using "base memory size in KB" of BIOS Data Area (00 阅读全文
posted @ 2011-06-23 11:15 Jiang, X. 阅读(10260) 评论(0) 推荐(0) 编辑
摘要: 中断的语法格式: INT n ; 调用中断n的中断服务程序。n 为中断号,取值0 ~ 255。 对标志位的影响:不影响CF、OF、SF、ZF。 MS DOS使用中断号21H作为系统调用,为程序员提供了上百种系统服务功能,对这些功能的调用步骤如下: (1)由AH给出功能号。 (2)根据相应功能的要求,设置入口参数。 (3)INT 21H。 (4)分析和使用出口参数。 其中,最常用的是功能号4CH,用来实现程序退出、并返回DOS。使用方法如下: mov ah, 4ch int 21h INT 21H 中断AH功能调用参数返回参数00程序终止(同INT 20H)CS=程序段前缀 01键盘输入并... 阅读全文
posted @ 2011-06-23 00:30 Jiang, X. 阅读(1671) 评论(0) 推荐(0) 编辑