基于x86处理器,32/64位机皆可运行,编译环境VS2017,使用到的链接库Irvine.32
代码段1:仅使用main过程,且未调用Irvine.32库,直接将比较结果存入EAX寄存器
.386
.model flat, stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword
.data
str1 byte "hello", 0
str2 byte "hello", 0
num1 word ?
num2 word ?
.code
main proc
mov EBX, lengthof str1
mov EDX, lengthof str2
cmp EBX, EDX
JNE L1
mov ecx, lengthof str1
sub ecx, 1
L2:
mov BL, str1[ecx]
mov DL, str2[ecx]
cmp EBX, EDX
JNE L1
loop L2
mov eax, 1 ;1相等
jmp L3
L1: mov eax, 0 ;0不相等
L3:
invoke ExitProcess,0
main endp
end main
附运行截图:
字符串不等 字符串相等代码段2:使用多个过程分析逻辑代码,调用Irvine.32库输出匹配结果
.386
.model flat,stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword
include Irvine32.inc
.data
MATCH BYTE "MATCH",0
NOMATCH BYTE "NOMATCH",0
STRING1 BYTE "hello world", 0
STRING2 BYTE "hello world", 0
.code
main proc
mov eax, LENGTHOF STRING1
CMP eax, LENGTHOF STRING2
JNE L1
CALL COMPARE
JMP L3
L1: CALL NO
L3:
invoke ExitProcess,0
main endp
COMPARE PROC
mov ecx, LENGTHOF STRING1
sub ecx, 1
L2:
mov al, STRING1[ecx]
cmp al, STRING2[ecx]
JNE L4
LOOP L2
call YES
JMP L5
L4: call NO
L5:
RET
COMPARE ENDP
YES PROC
mov edx, offset MATCH
CALL WriteString
CALL Crlf
CALL WaitMsg
RET
YES ENDP
NO PROC
mov edx, offset NOMATCH
CALL WriteString
CALL Crlf
CALL WaitMsg
RET
NO ENDP
end main
附运行截图:
字符串相等 字符串不等附:Irvine库下载地址
点击此处下载后可直接安装
附:Irvine库导入VS教程
1.工程目录右键->点击属性
2.在Microsoft Macro Assemble的Include Paths里面填写Irvine库文件所在路径
Microsoft Macro Assemble的Include Paths3.链接器->附加库目录里面也要添加附加库的路径,也就是Irvine库文件所在路径
链接器附加库目录4.链接器->输入->附加依赖库里面添加要加载的库文件,这里是Irvine32.lib;勿忘加分号
链接器输入附加依赖库
网友评论