VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 448|回复: 3

[分享] win32汇编得switch和C++的switch

[复制链接]
75_avatar_middle
最佳答案
18 
online_supermod 发表于 2020-5-8 00:28:24 | 显示全部楼层 |阅读模式
本帖最后由 wl1383838438 于 2020-5-8 00:53 编辑

C++代码比较入门的,所以这里不在做多解说,


#include<iostream>
using namespace std;
int main()
{
        int chioce;
        cout << "请输入一个数字10,20,30,40\n";
        cin >> chioce;
        switch (chioce)
        {
        case 10:
                cout << "a=10\n";
                getchar();
                break;
        case 20:
                cout << "a=20\n";
                getchar();
                break;
        case 30:
                cout << "a=30\n";
                getchar();
                break;
        case 40:
                cout << "a=40\n";
                getchar();
                break;

        default:
                break; cout << "请按照提示输入!\n";
        }
        getchar();
       
        return 0;
}

win32汇编得switch和C++的switch
-----------------------------------------------分割线-------------------------------------------------------------

该代码在RadMasm编译器以及Masm32编译器中编译过

.386;---------------指定指令集,告诉比编译器我们能将使用80386的指令集这句是必须的即使你不写这句那么也会
;使用其他的指令集 如.486.586.386p.486p这2个是特权的指令集
.model flat,stdcall;内存的模式和调用的约定,在win32中你只能使用一个模式即flat模式,因为win32的程序来说
;内存是连续的4GB的段,无所谓大小,而stdcall告诉编译器参数的传递方式,在调用子程序时,参数是通过堆栈传递的
;参数的传递方式又3中srdcall 和pascal  stdcall指定了参数从右边到左边压入堆栈
option casemap:none;----大小写敏感
;-------------包含需要调用的库文件
include C:\masm32\include\windows.inc
include C:\masm32\include\user32.inc
includelib C:\masm32\lib\user32.lib
include C:\masm32\include\kernel32.inc
includelib C:\masm32\lib\kernel32.lib

.data;-------------预定义的数据初始化段
a                    dd        40
szCaption       db      '结果',0
szText1           db       'a的10',0
szText2           db       'a的20',0
szText3           db       'a的30',0
szText4           db       'a的40',0
.data?;------------用来放未初始化的数据段,该字段下的变量并不会暂用exe的大小,而是在程序执行时动态分配的
;所以在开始不指定初始值的数据可以放在.data?中,
.code ;指明了 接下来是代码段,我们的代码应该放在这里, start指明了 程序从这里开始,
            

start:;程序开始-----------------仿C++的switch判断语句
              mov eax,a
              cmp eax,10
              je code1
              cmp eax,20;对比eax中的值成立则je跳转
              je code2;je语句在相等时后跳转ZF位 为1时
              cmp eax,30
              je code3
              cmp eax,40
              jmp code4
              
              code1:
              push 0
              push offset szCaption
              push offset szText1
              push 0
              call MessageBox
              jmp code5
                 ;--------------------------------------
              code2:
              push 0
              push offset szCaption
              push offset szText2
              push 0
              call MessageBox
              jmp code5
                 ;--------------------------------------
              code3:
              push 0
              push offset szCaption
              push offset szText3
              push 0
              call MessageBox
              jmp code5
                  ;--------------------------------------
              code4:
              push 0
              push offset szCaption
              push offset szText4
              push 0
              call MessageBox
              jmp code5
              
               code5:
               push 0
               call ExitProcess;退出当前的线程
end start;程序结束

----------------------------------------------分割线---




win32汇编得switch和C++的switch




上一篇:汇编指令 -&gt; 英文
下一篇:win32汇编的自加与VS的自加

本帖被以下淘专辑推荐:

58_avatar_middle
最佳答案
43 
online_vip 发表于 2020-5-8 20:11:38 | 显示全部楼层
老铁威武!
75_avatar_middle
最佳答案
18 
ico_lz  楼主| 发表于 2020-5-8 20:31:31 | 显示全部楼层

威武个毛蛋啊
58_avatar_middle
最佳答案
43 
online_vip 发表于 2020-5-8 20:54:05 | 显示全部楼层

每一行都做好注释,分隔,这种勤奋我是比不了。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-10-22 16:41

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表