注册 登录
编程论坛 汇编论坛

[求助】判断一个数是否为偶数

aixue 发布于 2007-11-21 18:41, 3939 次点击
本人初学汇编,菜鸟阶段,想请教各位做个题目:


用汇编指令判断一个数是否为偶数。。。





谢了!!!!
8 回复
#2
zhulei19782007-11-22 20:22
程序运行效果:
Please enter the number:7
odd number
Do you want to try again?(y/n)y
Please enter the number:6
even number
Do you want to try again?(y/n)n

data    segment
  message1 db 'Please enter the number:','$'
  message2 db 13,10,'odd number','$'
  message3 db 13,10,'even number','$'
  message4 db 13,10,'Do you want to try again?(y/n)','$'
  buf DB 9,?,8 dup ('0')
data    ends
code    segment
assume    cs:code,ds:data
start:
  mov    ax,data
  mov    ds,ax
flag3:
  lea dx,message1
  mov ah,9
  int 21h  
  MOV dx,offset buf
  MOV ah,0ah
  int 21h
  mov cl,[buf+1]
  mov ch,0
  lea si,[buf+1]
  add si,cx
  mov ch,[si]
  sub ch,30h
  rcr ch,1
  jnb flag1
  lea dx,message2
  mov ah,9
  int 21h
  jmp flag2
flag1:
  lea dx,message3
  mov ah,9
  int 21h
flag2:
  lea dx,message4
  mov ah,9
  int 21h
  mov ah,1
  int 21h
  cmp al,'y'
  jnz exit
  mov dl,13
  mov ah,2
  int 21h
  mov dl,10
  int 21h
  jmp flag3
exit:
  mov    ah,4ch
  int    21h
code  ends
end  start

[ 本帖最后由 zhulei1978 于 2007-11-23 15:08 编辑 ]
#3
zhulei19782007-11-23 16:49
data  segment
buf db 13, 21, 34, 43, 54, 61, 72, 89
x db 2
data  ends
code  segment
assume  cs:code,ds:data
start:
  mov  ax,data
  mov  ds,ax
  lea  si,buf
  mov  cx,x-buf
flag1:
  mov  al,[si]
  rcr  al,1
  jnb  flag2
  add  si,1
  loop  flag1  
flag2:
  mov  al,[si]
  mov  ah,0  
  mov  bx,10
  push  bx   
flag3:
  cmp  ax,0
  jz  flag4
  sub  dx,dx
  div  bx   
  add  dl,30h
  push  dx   
  jmp  flag3
flag4:
  pop  dx   
  cmp  dl,10
  je  flag5
  mov  ah,2
  int  21h
  jmp  flag4
flag5:
  mov  ah,4ch
  int  21h
code  ends
end  start
#4
aixue2007-11-24 00:00
谢谢版主!!!:)
#5
wubizao2007-11-26 09:11
用test指令就行了吧.也不会吧结果送至目的操作数
eg:             test    des,01h      ;假设des中为要被测试的数(为8位)
         jz next
                 若des为偶数,就跳至next
              *******0
与上00000001
结果为0,影响了标志位
#6
ewenyxw03312007-11-26 10:17
SI 这是个什么?我不太懂,刚学的,
#7
zhulei19782007-11-27 19:26
原帖由 [bold][underline]ewenyxw0331[/underline][/bold] 于 2007-11-26 10:17 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1114857&ptid=187665][/url]
SI 这是个什么?我不太懂,刚学的,


SI(Source Index)源变址寄存器一般与DS联用,用来确定数据段中某一存储单元的地址。该寄存器有自动增量和自动减量的功能,所以用于变址是很方便的。
#8
永夜的极光2007-11-27 21:19
si其实就是个16位的寄存器,拥有寄存器的一般功能----暂时保存数据

同时,si一般用于数组的寻址,和一些指令结合,可以高效的处理数组
#9
kr^zHaYj2007-11-28 11:19
输入的2进制位 是有个0 就是偶了,前提要 -30H ,因为是字符。
flag:   无限判断(我想应该用函数)
      输入N
           jmp  over
         jmp flag
over : mov ax, 4c00h
           int 21 H
只是想法,能力有限,未能实现
1