代码-visual studio 内联汇编问题

问题描述

visual studio 内联汇编问题

#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
char message1[]="Input the number of times for looping in the range of 0-12:";
char message9[] = "
The program will run";
char message10[] = "times.
";
char message2[]="
Enter an alphabet or a numeric digit:";
char message3[] = "Output:
";
char message4[] = "
a.Number of upper-case alphabets made by user:%ecx
";
char message5[]="
b.Number of lower-case alphabets made by user: %ebx
",edx;
char message6[]="
c.Average of numeric inputs made by user: %eax
",eax ;
char message7[] = "
The program exists without looping.";
char message8[] = "Type in any integer and press RETURN key to finish:";
char format[]="%u";
int times;
int counter;
int digit;
int end;

_asm {

    lea eax, message1;
    push eax;
    call printf;
    add esp, 4;

    lea eax, counter;
    push eax;
    lea eax, format;
    push eax;
    call scanf_s;
    add esp, 8;

    mov eax, counter;
    cmp eax, 0;
    jle nequal;

    lea eax, message9;
    push eax;
    call printf;
    add esp, 4;

    lea eax, times;
    push eax;
    lea eax, format;
    push eax;
    call printf;
    add esp, 4;

    lea eax, message10;
    push eax;
    call printf;
    add esp, 4;

    mov ebx, 0;
for_loop:
    lea eax, message2;
    push eax;
    call printf;
    add esp, 4;

    lea eax, digit;
    push eax;
    lea eax, format;
    push eax;
    call scanf_s;
    add esp, 8;
    inc ebx;
    cmp ebx, counter;

    jl for_loop;

Uppercase:

    lea eax, message3;
    push eax;
    call printf;
    add esp, 4;

    lea eax, message4;
    push eax;
    call printf;
    add esp, 4;

    mov ah, 1;
    cmp al, 'A';
    jb next1;
    cmp al, 'Z';
    ja next1;
    mov ecx, 0;
    inc ecx;
    jmp exit;

Lowercase:
next1:
    lea eax, message5;
    push eax;
    call printf;
    add esp, 4;
    cmp al, 'a';
    jb next2;
    cmp al, 'z';
    ja next2;
    mov edx, 0;
    inc edx;

    jmp exit;

Numeric:
next2:
    lea eax, message6;
    push eax;
    call printf;
    add esp, 4;
    cmp al, '0';
    jb next3;
    cmp al, '9';
    ja next3;

    mov eax, 0;
    add eax, digit;

    jmp exit;

next3:
    jl for_loop;

exit:

    jmp finish;

nequal:lea eax, message7;
    push eax;
    call printf;
    add esp, 4;

finish:lea eax, message8;
    push eax;
    call printf;
    add esp, 4;

    lea eax, end;
    push eax;
    lea eax, format;
    push eax;
    call scanf_s;
    add esp, 8;

}
return 0;

}
这样输出的数字会特别大。。我想输出我所输入的数字,问题在哪里。
以及如果我需要统计一句话中的字母和我所输入数字的平均值,应该怎么写代码?

解决方案

单步调试下,代码太多。

解决方案二:

1、打开工作区时出现了如下错误: cannot access the ClassView information file.ClassView information will not be available.解决方法:a.关闭工程b.删除工程下.clw .ncb 文件及/debug目录,c.重建工程build all......
答案就在这里:Visual studio 常见问题
----------------------

时间: 2024-11-01 16:49:36

代码-visual studio 内联汇编问题的相关文章

在Visual C++中使用内联汇编

一.内联汇编的优缺点 因为在Visual C++中使用内联汇编不需要额外的编译器和联接器,且可以处理Visual C++中不能处理的一些事情,而且可以使用在C/C++中的变量,所以非常方便.内联汇编主要用于如下场合: 1.使用汇编语言写函数: 2.对速度要求非常高的代码: 3.设备驱动程序中直接访问硬件: 4."Naked" Call的初始化和结束代码. //(."Naked",理解了意思,但是不知道怎么翻译,大概就是不需要C/C++的编译器(自作聪明)生成的函数初

代码-内联汇编向int变量中输入字符报错的问题

问题描述 内联汇编向int变量中输入字符报错的问题 在VC内联汇编中, myarray[]是个int型的数组 用循环来输入数组,以下是循环内的代码 C/C++ code char inputformat[]="%d"; Assembly code lea eax,myarray[ebx]; // push eax; // lea eax,inputformat; // achieve the number input push eax; // call scanf; // add es

内联汇编基础知识

几天看了孙原等几位仁兄关于汇编语言的几篇文章,颇感兴趣.于是查了查98版的MSDN中,其中也有几篇关于内联汇编的基础,索引字是asm.讲得不算太难,于是试着将其内容写下来了,特此贴来. 一.内联汇编简述 Visual C++ 6.0编译器下,内联汇编可以使用所有的Intel486处理器指令集.而且可以对目标处理器建立起伪指令来实现附加指令功能.内联汇编可以使用MASM编译器所允许的表达式,其中的一些表达式可以通过操作符和操作数的组合,对单精值进行运算. 虽然内联汇编可以访问C\C++中的数据变量

关于内联汇编的几个技巧

有时我们的程序需要一些很高的执行效率或者执行系统底层的功能模块,这些关键的部分我们可以采用内联汇编直接插入汇编指令来达到我们的要求,以下是几个技巧与大家共同探讨. 1.内联汇编嵌入VC语句: 在VC中内联汇编非常方便,只需要按照如下格式 __asm{ //汇编语句 } 请看如下示例代码 void CAlcmemDlg::OnButton3() { DWORD d=(m_size*1024*1024)/sizeof(DWORD); DWORD*p=(DWORD*)m_p; DWORD s; m_p

通过两个场景向初学者介绍内联汇编的基本用法和基本语法

对于 C++/C++ 程序员来说,内联汇编并不是一个新特性,它可以帮助我们充分利用计算能力.然而,大多数程序员很少有机会实际使用该特性.事实上,内联汇编只为特定的要求提供服务,在涉及先进的高层编程语言时尤其如此. 本文介绍了 IBM Power 处理器架构的两个场景.使用本文提供的示例,我们可以发现在什么地方应用了内联汇编. 场景 1:更好的库 C/C++ 编程语言支持逻辑运算.在本例中,http://www.aliyun.com/zixun/aggregation/6579.html">

最牛X的 GCC 内联汇编

正如大家知道的,在C语言中插入汇编语言,其是Linux中使用的基本汇编程序语法.本文将讲解 GCC 提供的内联汇编特性的用途和用法.对于阅读这篇文章,这里只有两个前提要求,很明显,就是 x86 汇编语言和 C 语言的基本认识. 1. 简介 1.1 版权许可 Copyright (C) 2003 Sandeep S. 本文档自由共享;你可以重新发布它,并且/或者在遵循自由软件基金会发布的 GNU 通用公共许可证下修改它;也可以是该许可证的版本 2 或者(按照你的需求)更晚的版本. 发布这篇文档是希

GCC 内联汇编 HOWTO

v0.1, 01 March 2003. 本 HOWTO 文档将讲解 GCC 提供的内联汇编特性的用途和用法.对于阅读这篇文章,这里只有两个前提要求,很明显,就是 x86 汇编语言和 C 语言的基本认识. 1. 简介 1.1 版权许可 Copyright (C) 2003 Sandeep S. 本文档自由共享:你可以重新发布它,并且/或者在遵循自由软件基金会发布的 GNU 通用公共许可证下修改它:也可以是该许可证的版本 2 或者(按照你的需求)更晚的版本. 发布这篇文档是希望它能够帮助别人,但是

vc++-VC++内联汇编要怎么将char 转换为int

问题描述 VC++内联汇编要怎么将char 转换为int 我的代码是先输入char格式..然后我选出其中的数字再转换为int格式最后算出平均值..要怎么做 解决方案 VC++中的CString.char.int类型转换VC CString,int,string,char*转换vc++中char*和CString转换 解决方案二: for(i=0; i< strlen(s); i++) { if(s[i] >= '0' && s[i] <= '9') }

vc++-VC++内联汇编 变量未初始化问题

问题描述 VC++内联汇编 变量未初始化问题 char input; int input1=input; 我是这么写的..然后出现了代码未初始化的问题..input是需要输入的值.input1是输入的值中的整数.这么运行的话我之后的输出会是任意一个负的整数..求教 解决方案 没太搞明白你说的问题.你是想把input里的数字字符变成整数赋给input1吗? 如果是,可以这样: input1=input-'0'; 解决方案二: 一个字符型的值赋值给整型能对么- 解决方案三: push input1;