|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在鱼C呆了段时间了,差不多有一年多了吧。记得那在学王爽的16位汇编,在网上查资料时无意来到了鱼C,自然就Down了一个小甲鱼的视频看下,只看了第一个,对!就只看了一个,心中就已经打定了注意准备支持他了!第二天就买了鱼C光盘后一直看视频教程因为确实讲得太好了,非常的仔细。反正我是觉得讲得很到位了,因为在看书时留下的问题再结合看视频教程一下就醒目了。,也常来论坛潜水。学到了不少的东东。
看Win32的汇编也有一个月了,之前电脑卖了。就只是看理论而已,很少敲,这段时间天天看了小甲鱼的视频后颇有感悟。就写了这个程序,调试了一个多小时通过!发个贴算做个笔记吧,希望能结交到兴趣相同的朋友们!
本人还是个大菜鸟,高手勿喷。。谢谢~~{:7_168:}
;------------------------------------
;【1】
;------------------------------------
;程序功能:计算1+2+3+4..+100 的结果
; 将其结果用MessageBox打印到屏幕上
;------------------------------------
.386
.model flat,stdcall
option casemap:none
;------Include 文件定义--------------
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;----Data Segment------------
.data
dwSum dd 0 ;计算和,最终的结果
dwCount dd 0 ;计数器,从1开始到100结束
szCaption db '正在计算1+2+..+100..',0
szResult db '结果为: %d',0 ;显示为整形结果。wspintf缓冲区的一个参数,下面要用到
szBuffer db 128 dup(0)
;-----Code Segment----------
.code
;********************计算结果子程序******************
_Result proc
xor eax,eax ;清零
.while (dwCount<100) ;判断dwCount的值,如果小于100就执行下面的循环 <--
inc eax ;eax==1 |
add dwSum,eax ;和为1 |
mov dwCount,eax ;dwCount==1 __|
.endw
ret
_Result endp
start: call _Result
invoke wsprintf,addr szBuffer,addr szResult,dwSum ;将结果参数保存到缓冲区
invoke MessageBox,NULL,addr szBuffer,addr szCaption,MB_OK or MB_ICONINFORMATION ;以便MessageBox来调用输出结果
invoke ExitProcess,NULL
end start
;--------------------------
;【2】
;--------------------------
;------------------------------------
;程序功能:计算1+2+3+4..+100 的结果
; 将其结果用MessageBox打印到屏幕上
;------------------------------------
.386
.model flat,stdcall
option casemap:none
;------Include 文件定义--------------
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;----Data Segment------------
.data
dwSum dd 0 ;计算和,最终的结果
dwCount dd 0 ;计数器,从1开始到100结束
szCaption db '正在计算1+2+..+100..',0
szResult db '结果为: %d',0 ;显示为整形结果。wspintf缓冲区的一个参数,下面要用到
szBuffer db 128 dup(0)
;-----Code Segment----------
.code
;********************计算结果子程序******************
_Result proc
xor eax,eax ;清零
.while TRUE
inc eax ;eax==1
add dwSum,eax ;结果为1
mov dwCount,eax ;dwCount==1
.break .if (eax>=100) ;注意,判断条件在这了!
.endw
ret
_Result endp
start: call _Result
invoke wsprintf,addr szBuffer,addr szResult,dwSum ;将结果参数保存到缓冲区
invoke MessageBox,NULL,addr szBuffer,addr szCaption,MB_OK or MB_ICONINFORMATION ;以便MessageBox来调用输出结果
invoke ExitProcess,NULL
end start
;--------------------------
;【3】
;--------------------------
;------------------------------------
;程序功能:计算1+2+3+4..+100 的结果
; 将其结果用MessageBox打印到屏幕上
;------------------------------------
.386
.model flat,stdcall
option casemap:none
;------Include 文件定义--------------
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;----Data Segment------------
.data
dwSum dd 0 ;计算和,最终的结果
dwCount dd 0 ;计数器,从1开始到100结束
szCaption db '正在计算1+2+..+100..',0
szResult db '结果为: %d',0 ;显示为整形结果。wspintf缓冲区的一个参数,下面要用到
szBuffer db 128 dup(0)
;-----Code Segment----------
.code
;********************计算结果子程序******************
_Result proc
xor eax,eax ;清零
.while (eax != 100) ;条件成立么? <<------
inc eax ;eax==1 |
add dwSum,eax ;结果为1 |
mov dwCount,eax ;dwCount==1 |
.continue ;直接跳到循环头部开始执行 -
.endw
ret
_Result endp
start: call _Result
invoke wsprintf,addr szBuffer,addr szResult,dwSum ;将结果参数保存到缓冲区
invoke MessageBox,NULL,addr szBuffer,addr szCaption,MB_OK or MB_ICONINFORMATION ;以便MessageBox来调用输出结果
invoke ExitProcess,NULL
end start
;--------------------------
;【4】
;--------------------------
;------------------------------------
;程序功能:计算1+2+3+4..+100 的结果
; 将其结果用MessageBox打印到屏幕上
;------------------------------------
.386
.model flat,stdcall
option casemap:none
;------Include 文件定义--------------
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;----Data Segment------------
.data
dwSum dd 0 ;计算和,最终的结果
dwCount dd 0 ;计数器,从1开始到100结束
szCaption db '正在计算1+2+..+100..',0
szResult db '结果为: %d',0 ;显示为整形结果。wspintf缓冲区的一个参数,下面要用到
szBuffer db 128 dup(0)
;-----Code Segment----------
.code
;********************计算结果子程序******************
.code
_Result proc
xor eax,eax ;清零
.repeat ;先执行循环体
inc eax ;eax==1
add dwSum,eax ;和为1
mov dwCount,eax ;dwCount==1
.until dwCount>=100 ;条件判断到这了!
ret
_Result endp
start: call _Result
invoke wsprintf,addr szBuffer,addr szResult,dwSum ;将结果参数保存到缓冲区
invoke MessageBox,NULL,addr szBuffer,addr szCaption,MB_OK or MB_ICONINFORMATION ;以便MessageBox来调用输出结果
invoke ExitProcess,NULL
end start
;--------------------------
;【5】
;--------------------------
;------------------------------------
;程序功能:计算1+2+3+4..+100 的结果
; 将其结果用MessageBox打印到屏幕上
;------------------------------------
.386
.model flat,stdcall
option casemap:none
;------Include 文件定义--------------
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;----Data Segment------------
.data
dwSum dd 0 ;计算和,最终的结果
dwCount dd 0 ;计数器,从1开始到100结束
szCaption db '正在计算1+2+..+100..',0
szResult db '结果为: %d',0 ;显示为整形结果。wspintf缓冲区的一个参数,下面要用到
szBuffer db 128 dup(0)
;-----Code Segment----------
.code
;********************计算结果子程序******************
_Result proc
xor eax,eax ;清零
cmp eax,100 ;比较
je ResultEQ
NotEQ: ;不相等时执行循环
inc eax
add dwSum,eax
mov dwCount,eax
cmp eax,100
jne NotEQ
ResultEQ:
ret
_Result endp
start: call _Result
push dwSum ;参数进栈
push offset szResult ;结果进栈
push offset szBuffer ;缓冲区进栈
call wsprintf ;调用wsprintf函数
push MB_OK or MB_ICONINFORMATION ;MessageBox相关参数进栈
push offset szCaption
push offset szBuffer
push NULL
call MessageBox ;调用MessageBox函数
push NULL ;调用ExitProcess函数退出进程
call ExitProcess
end start
结果如图:
|
|