这是在上Intel汇编程序设计的时候写的一个课堂练习,对于初学者,很想输出结果,但是有不知道怎么做,可以仿造下面的模板去输出结果.
;>>>>>>>>>>>>>>>>>
;本程序完成了将 Hello,My Asm 字符串翻转, 转化为大写,小写的操作
;通过MASM等编译器编译连接就可生成.exe文件
;>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
.data
HelloInit BYTE "原始字符串, Hello,My Asm, 看我开始变化",0
HelloString BYTE "HelloMyAsm",0
HelloStringSize = ($ - HelloString) - 1
HelloTempString BYTE 20 dup(0)
szCaption db 'Test MessageBox',0
szMax db '大写',0
szMin db '小写',0
szFan db '翻转',0
szEnd db '好了,我变完了...',0
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
.code
;将HelloString反转显示
RollOverString PROC
pushad
mov ecx, HelloStringSize
mov esi, 0
L1: movzx eax, HelloString[esi]
push eax
inc esi
loop L1
mov ecx, HelloStringSize
mov esi, 0
L2:pop eax
mov HelloTempString[esi],al
inc esi
loop L2
;显示翻转的字符串
;invoke MessageBox,NULL,offset HelloTempString, offset szCaption,MB_OK
;拆解invoke指令显示
push MB_OK
push offset szFan
push offset HelloTempString
push NULL
call MessageBox
popad
ret
RollOverString ENDP
;将字符串全部大写
MaxWriteString PROC
pushad
mov ecx, HelloStringSize
mov esi, 0
L1:movzx eax, HelloString[esi]
and al, 11011111b ;变化为大写
mov HelloTempString[esi], al
inc esi
loop L1
;显示翻转的字符串
invoke MessageBox,NULL,offset HelloTempString, offset szMax,MB_OK
popad
ret
MaxWriteString ENDP
;将字符串全部大写
MinWriteString PROC
pushad
mov ecx, HelloStringSize
mov esi, 0
L1:movzx eax, HelloString[esi]
or al, 00100000b ;变化为小写
mov HelloTempString[esi], al
inc esi
loop L1
;显示翻转的字符串
invoke MessageBox,NULL,offset HelloTempString, offset szMin,MB_OK
popad
ret
MinWriteString ENDP
start:
;显示原始字符串
invoke MessageBox,NULL,offset HelloInit, offset szCaption,MB_OK
;调用将字符串全部大写函数
invoke MaxWriteString
;调用将字符串全部转化为小写函数
invoke MinWriteString
;调用翻转字符串函数
invoke RollOverString
invoke MessageBox,NULL,offset szEnd, offset szCaption,MB_OK
;结束程序
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start