这学期学微机原理,顺便学了点汇编,遇到了很多问题,到百度上去求助几乎没人理我,到CSDN来后发现这里的大牛们特别热情,以后就在CSDN扎根了。
下面是我作的一点点笔记(有许多点子还是大牛们告诉我的),如果其中的错误的地方还希望大家指出。马上就得回家了,就不再排版了,以后再修改。
我用的汇编工具是TASM,对于其它的工具可能结果不同 。
(一)、汇编缩写表:
DB:Define Byte(未完)
———————————————————————————————————
(二)、反汇编时一般不能完全还原为原来的代码
eg:
JC again;在反汇编时会以JB出现
(三)、syntax error
语法错误,如宏命令与已有的指令名,标号名冲突
(四)、关于MOV的用法:
Mov dst, src
Reg reg/mem/data/segreg
Mem reg/data/segreg
Segreg reg/mem
Ac mem(ac指ax,al,该指令较其它指令短一个字节,执行速度也快些)
Mem ac
注:
1、SEGREG只能出现在MOV,PUSH,POP中
2、Mov mem,mem;错误,如MOV byte ptr [BX],[SI]; Illegal memory reference
3、MOV segreg,data;错误,立即数不能传给Segreg
4、MOV segreg,segreg ;SEGMENT不可相互传送
(五)、ASSUME作用(猜测):
ASSUME 作用:汇编时在符号表中记录下——变量和标号的段存储位置,如CS、DS、SS。
汇编程序遇到变量、标号时动作:
1、在对变量操作指令中,汇编程序会在符号表中查找该变量的段地址存放地点、偏移地址(段地址存放地点由ASSUME 指定如果没有ASSUME 指定,会报错Can't address with currently ASSUMEd segment registers)。
2、在对标号操作指令中,汇编程序会在符号表中查找该标号的段地址存放地点、偏移地址(段地址存放地点由ASSUME 指定, 如果没有ASSUME 指定,会报错Near jump or call to different CS)。
注意后最几段(39行后)的对变量NO(在CODE中定义)和BUF(在DATA中定义)的寻址,如果没有ASSUME,汇编时就会报错。
30 0009 C6 07 01 mov byte ptr [bx],1;use ds
31 000C C6 07 01 mov byte ptr ds:[bx],1;use ?
32 000F C6 47 01 01 mov byte ptr 1[bx],1;use ds
33 0013 C6 47 01 01 mov byte ptr ds:1[bx],1;use ?
34 0017 36: C6 07 01 mov byte ptr ss:[bx],1;use ?
35 001B C6 46 00 01 mov byte ptr [bp],1;use ss
36 001F 3E: C6 46 00 01 mov byte ptr ds:[bp],1;use ?
37 0024 3E: C7 46 00 0001 mov ds:[bp],1;use ?
*Warning* /y/a.ASM(28) Argument needs type override
38 002A 3E: C6 46 00 01 mov byte ptr ds:[bp],1;use ?
39 002F C6 87 0000r 01 mov buf[bx],1;use ds
40 0034 C6 87 0001r 01 mov buf+1[bx],1;use ds
41 0039 2E: C6 87 0005r 01 mov no[bx],1;use ?
42 003F 3E: C6 86 0000r 01 mov buf[bp],1;use ss
43 0045 2E: C6 86 0005r 01 mov no[bp],1;use ?
44 004B C6 06 0000r 01 mov buf,1
45 0050 2E: C6 06 0005r 01 mov no,1
注: