|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 PAGE-404 于 2017-12-23 11:31 编辑
EMU8086
逆向过VC++6.0程序的老铁,一定有种熟悉的感觉吧~~~
推荐一个汇编IDE:http://www.emu8086.com/files/emu8086v408r11.zip
- data segment
- db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
- db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
- db '1993','1994','1995'
- ;以上是表示21年的21个字符串
- dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
- dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
- ;以上是表示21年公司总收的21个dword型数据
- dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
- dw 11542,14430,45257,17800
- ; 以上是表示 21年公司雇员人数的21个word型数据
- data ends
- stack segment
- dw 100h dup (20h)
- stack ends
- heap segment
- db 32 dup (20h)
- heap ends
- code segment
- assume cs:code,ds:data,ss:stack,es:heap
- start:
- ; 初始化寄存器
- mov ax,data
- mov ds,ax
- mov ax,stack
- mov ss,ax
- mov ax,heap
- mov es,ax
- ; 进入主函数
- call main
- ; 结束标志
- mov ax,4Ch
- int 21h
-
- ; -----------------------------------------------------------
- ; 功能:入口函数
- ; 参数:
- ; 无
- ; 返回:
- ; 无
- ; -----------------------------------------------------------
- main:
- ; 保存bp
- push bp
- ; 提升栈底
- mov bp,sp
- ; 提升栈顶,即16个byte
- sub sp,10h
- ; 保存cx
- push cx
- ; PeopleCountToHeap中bx (人数偏移地址)
- ; 我也想push 0A80h,但是进栈就变成了FFA8,操蛋~~~
- mov cx,0A8h
- push cx
- ; IncomeToHeap中bx (收入偏移地址)
- mov ss:[bp-2],54h
- push ss:[bp-2]
- ; ShowString中bx (累加)
- mov ss:[bp-4],0
- push ss:[bp-4]
- ; Year中bx (累加)
- push ss:[bp-4]
- ; 栈中存入ds和es
- push ds
- push es
- ; 一共有21条数据,开始循环
- mov cx,21
- first:
- ; 调用YearToHeap函数,将年份保存在heap
- call YearToHeap
- ; 调用IncomeToHeap函数,将收入保存在heap
- call IncomeToHeap
- ; 调用PeopleCountToHeap,将员工人数保存在heap
- call PeopleCountToHeap
- ; 调用AvgIncomeToHeap,计算人均收入,保存在heap
- call AvgIncomeToHeap
- ; 参数一:控制打印列
- push ss:[bp-4]
- ; 参数二:屏幕显示基址
- mov ss:[bp-6],0B800h
- push ss:[bp-6]
- ; 参数三:控制打印颜色
- mov ss:[bp-8],02h
- push ss:[bp-8]
- ; 调用ShowString,打印整条数据
- call ShowString
- ; 因为传了三个参数,平衡栈
- add sp,6
- ; 累加(1.人数偏移地址 2.收入偏移地址)
- add ss:[bp-14h],2
- add ss:[bp-16h],4
- ; 清除heap中的数据
- call clearHeap
- loop first
- ; 恢复各个寄存器的值
- pop es
- pop ds
- ; 中间push了3个所以sp加6
- add sp,6
- pop cx
- ; 恢复原来栈顶,栈底
- mov sp,bp
- pop bp
- ret
复制代码
|
|