1、
main()
{
_AX=1;
_BX=2;
_CX=_AX+BX;
}
查看编译后的机器码和汇编代码为
1908:0000 BA5F19 MOV DX,195F
1908:0003 2E CS:
1908:0004 8916F801 MOV [01F8],DX
1908:0008 B430 MOV AH,30
1908:000A CD21 INT 21 ;取dos版本号
1908:000C 8B2E0200 MOV BP,[0002]
1908:0010 8B1E2C00 MOV BX,[002C]
1908:0014 8EDA MOV DS,DX
1908:0016 A39200 MOV [0092],AX
1908:0019 8C069000 MOV [0090],ES
1908:001D 891E8C00 MOV [008C],BX
1908:0021 892EAC00 MOV [00AC],BP
1908:0025 C7069600FFFF MOV WORD PTR [0096],FFF
1908:002B E83401 CALL 0162
1908:002E C43E8A00 LES DI,[008A]
1908:0032 8BC7 MOV AX,DI
1908:0034 8BD8 MOV BX,AX
1908:0036 B9FF7F MOV CX,7FFF
1908:0039 26 ES:
1908:003A 813D3837 CMP WORD PTR [DI],3738
1908:003E 7519 JNZ 0059
1908:0040 26 ES:
1908:0041 8B5502 MOV DX,[DI+02]
1908:0044 80FA3D CMP DL,3D
1908:0047 7510 JNZ 0059
1908:0049 80E6DF AND DH,DF
1908:004C FF069600 INC WORD PTR [0096]
1908:0050 80FE59 CMP DH,59
1908:0053 7504 JNZ 0059
1908:0055 FF069600 INC WORD PTR [0096]
1908:0059 F2 REPNZ
1908:005A AE SCASB
1908:005B E361 JCXZ 00BE
1908:005D 43 INC BX
1908:005E 26 ES:
1908:005F 3805 CMP [DI],AL
1908:0061 75D6 JNZ 0039
1908:0063 80CD80 OR CH,80
1908:0066 F7D9 NEG CX
1908:0068 890E8A00 MOV [008A],CX
1908:006C B90100 MOV CX,0001
1908:006F D3E3 SHL BX,CL
1908:0071 83C308 ADD BX,+08
1908:0074 83E3F8 AND BX,-08
1908:0077 891E8E00 MOV [008E],BX
1908:007B 8CDA MOV DX,DS
1908:007D 2BEA SUB BP,DX
1908:007F 8B3E9C01 MOV DI,[019C]
1908:0083 81FF0002 CMP DI,0200
1908:0087 7307 JNB 0090
1908:0089 BF0002 MOV DI,0200
1908:008C 893E9C01 MOV [019C],DI
1908:0090 81C7EC01 ADD DI,01EC
1908:0094 7228 JB 00BE
1908:0096 033E9A01 ADD DI,[019A]
1908:009A 7222 JB 00BE
1908:009C B104 MOV CL,04
1908:009E D3EF SHR DI,CL
1908:00A0 47 INC DI
1908:00A1 3BEF CMP BP,DI
1908:00A3 7219 JB 00BE
1908:00A5 833E9C0100 CMP WORD PTR [019C],+00
1908:00AA 7407 JZ 00B3
1908:00AC 833E9A0100 CMP WORD PTR [019A],+00
1908:00B1 750E JNZ 00C1
1908:00B3 BF0010 MOV DI,1000
1908:00B6 3BEF CMP BP,DI
1908:00B8 7707 JA 00C1
1908:00BA 8BFD MOV DI,BP
1908:00BC EB03 JMP 00C1
1908:00BE E92101 JMP 01E2
1908:00C1 8BDF MOV BX,DI
1908:00C3 03DA ADD BX,DX
1908:00C5 891EA400 MOV [00A4],BX
1908:00C9 891EA800 MOV [00A8],BX
1908:00CD A19000 MOV AX,[0090]
1908:00D0 2BD8 SUB BX,AX
1908:00D2 8EC0 MOV ES,AX
1908:00D4 B44A MOV AH,4A ;修改内存申请
1908:00D6 57 PUSH DI
1908:00D7 CD21 INT 21
1908:00D9 5F POP DI
1908:00DA D3E7 SHL DI,CL
1908:00DC FA CLI
1908:00DD 8ED2 MOV SS,DX
1908:00DF 8BE7 MOV SP,DI
1908:00E1 FB STI
1908:00E2 33C0 XOR AX,AX
1908:00E4 2E CS:
1908:00E5 8E06F801 MOV ES,[01F8]
1908:00E9 BFA601 MOV DI,01A6
1908:00EC B9EC01 MOV CX,01EC
1908:00EF 2BCF SUB CX,DI
1908:00F1 F3 REPZ
1908:00F2 AA STOSB
1908:00F3 0E PUSH CS
1908:00F4 FF16A001 CALL [01A0]
1908:00F8 E84401 CALL 023F
1908:00FB E82C02 CALL 032A
1908:00FE B400 MOV AH,00
1908:0100 CD1A INT 1A
1908:0102 89169800 MOV [0098],DX
1908:0106 890E9A00 MOV [009A],CX
1908:010A FF16A401 CALL [01A4]
1908:010E FF368800 PUSH [0088]
1908:0112 FF368600 PUSH [0086]
1908:0116 FF368400 PUSH [0084]
1908:011A E8DD00 CALL 01FA ;调用主函数
1908:011D 50 PUSH AX
1908:011E E8E900 CALL 020A
1908:0121 2E CS:
1908:0122 8E1EF801 MOV DS,[01F8]
1908:0126 E87C00 CALL 01A5
1908:0129 0E PUSH CS
1908:012A FF16A201 CALL [01A2]
1908:012E 33C0 XOR AX,AX
1908:0130 8BF0 MOV SI,AX
1908:0132 B92F00 MOV CX,002F
1908:0135 90 NOP
1908:0136 FC CLD
1908:0137 0204 ADD AL,[SI]
1908:0139 80D400 ADC AH,00
1908:013C 46 INC SI 这里有一个循环
1908:013D E2F8 LOOP 0137
1908:013F 2D370D SUB AX,0D37
1908:0142 90 NOP
1908:0143 740A JZ 014F
1908:0145 B91900 MOV CX,0019
1908:0148 90 NOP
1908:0149 BA2F00 MOV DX,002Ft
1908:014C E88B00 CALL 01DA
1908:014F 8BEC MOV BP,SP
1908:0151 B44C MOV AH,4C
1908:0153 8A4602 MOV AL,[BP+02]
1908:0156 CD21 INT 21 退出
2、主函数地址为01FA
主函数的内容
1908:01FA 55 PUSH BP
1908:01FB 8BEC MOV BP,SP
1908:01FD B80100 MOV AX,0001
1908:0200 BB0200 MOV BX,0002
1908:0203 8BC8 MOV CX,AX
1908:0205 03CB ADD CX,BX
1908:0207 5D POP BP
1908:0208 C3 RET
main代表主函数在代码段中的偏移地址
- [cutebe] 相当牛,这个苦思冥想也值了。^_^ 11/30 00:00
- [parse] 如果忽略消息循环,那么操作系统加载的程序很快就执行完了,就像DOS程序一闪而过,所以CPU会空闲下来 06/30 09:04
- [游客] 楼主好厉害,挺一下! 01/19 08:43
- [游客] 很不错。 01/04 18:36
- [chinatree] 潜力贴留名,沙发。 11/08 12:58
- [youthangel] 恩,这次对了 10/30 18:56
- [fpamc] mov bx,18 在这条指令的上边是不是要加一条sub dx,dx? 10/30 10:03
- [fpamc] 对的 10/27 11:19
- [fpamc] 对的 10/27 09:00
- [fpamc] 哦,对不起,看错了。实验13也有一个7ch中断 10/27 08:52
- [游客] 现在急需一个汇编大作业。。。。。。可以么。。。。。如果今天之内看见留言 就加 1765496715 12/28 16:52
- [youthangel] 这算是对我学习的鼓励吗?谢谢!咱们这样交流就可以了 10/11 15:48
- [fpamc] 多日观察,你的学习积极性挺高的。可以来我们群了。群号:75916434 10/11 10:58