汇编语言宏程序,等待键盘输入一个16位或32位有符号整数,将其放入对应位数的内存操作数(电脑中了一个0day,发上来保存一下)

include Macros.inc
include Irvine32.inc
hello macro x:req,y:req
local L1,L2
;;向宏传输两个实参,第一个(x)为32位内存操作数,第二个为16位内存操作数
  push eax
  push ebx
  call ReadInt
  mov ebx,eax
  shr eax,16
  cmp eax,0;;确认是否为32位数或16位正数
  je L1
  cmp eax,0ffffh;;确认是否为16位负数
  je L1
  mov x,ebx
  jmp L2
L1:
  mov y,bx
L2:
  pop ebx
  pop eax
endm 
.data
big sdword 0
sma sword  0
.code
main proc
  hello big,sma
  mShow big
  mShow sma
  mov eax,0
  exit
main endp
end main

修复了-65536(0FFFF0000h)无法输出的bug

include Macros.inc
include Irvine32.inc
hello macro x:req,y:req
local L1,L2,L3,L4
;;向宏传输两个实参,第一个(x)为32位内存操作数,第二个为16位内存操作数
  push eax
  push ebx
  call ReadInt
  mov ebx,eax
  shr eax,16
  cmp eax,0;;确认是否为32位数或16位正数
  je L3
  cmp eax,0ffffh;;确认是否为16位负数
  je L1
L4:
  mov x,ebx
  jmp L2
L1:
  cmp bx,0
  je L4
L3:
  mov y,bx
L2:
  pop ebx
  pop eax
endm 
.data
big sdword 0
sma sword  0
.code
main proc
  hello big,sma
  mShow big
  mShow sma
  mov eax,0
  exit
main endp
end main
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值