【求助】怎么判断一个数是否是偶数啊 div 指令怎么用 T^T

eternuii 2014-10-22 11:04:07
想要的效果是
Enter the number:
(用户input一个数后)
Output:
The number is odd 或者 The number is even

下面是我写的,红色的是不会写的部分,div指令看王爽的《汇编语言》不甚明白 ps:我看书上说被除数是32位的,要把高16位放在dx里,低16位放在ax里,我这个input是int类型,应该是32位的吧?那我怎么把这个数的高十六位和低十六位分别赋给dx和ax啊,汇编要怎么写呢?pps:余数是在dx中吧,我拿dx和0比较来判断奇偶没问题吧?

// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
char message1[] = "Enter the number: ";
char message2[] = "The number is even. ";
char message3[] = "The number is odd.";
char format[] = "%d";

int input;

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

lea eax, input;
push eax;
lea eax, format;
push eax;
call scanf;
add esp, 8;

mov eax, input;
mov bx, 2; //判断input是否为偶
div bx;
cmp dx, 0;
je label1;
jne label2;


label1:lea eax, message2;
push eax;
call printf;
add esp, 4;

label2:lea, eax, message3;
push eax;
call printf;
add esp, 4;
}
return 0;
}
...全文
305 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2014-10-22
  • 打赏
  • 举报
回复
那就不对了,div bx 的话,应该是 dx:ax / bx 的,即被除数应该是在 dx:ax 里,哪怕是 32 位下。这样的问题,其实在调试软件里一走便知。
eternuii 2014-10-22
  • 打赏
  • 举报
回复
可是因为之后还要用到除法求算平均数,所以还是想知道当被除数放在eax里的时候怎么用div, 不好意思,菜鸟级别, 还请赐教
zara 2014-10-22
  • 打赏
  • 举报
回复
判断是否偶数,还要用 div 2 ?一般优选的方法是右移一位,然后看 CF 标记位吧,CF=0 是偶数,CF=1 则不是。
eternuii 2014-10-22
  • 打赏
  • 举报
回复
谢谢你,这下明白了!
zara 2014-10-22
  • 打赏
  • 举报
回复
你这个吧,是嵌在 c++ 里的,应该是 32 位的程序吧,就没有必要使用 16 位的操作方式,而应该就势采用 32 位的:
  mov  eax, input
xor edx, edx
mov ebx, 2
div ebx
test edx, edx
jz label1
eternuii 2014-10-22
  • 打赏
  • 举报
回复
先谢谢你的耐心回复。 问题就在这儿 我不知道这个input它的高16位和低16位分别是多少,怎么用dx:ax/bx 呢

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧