Intel汇编-传送BCD值

# An example of using BCD integer values (传送BCD值)
#
# FBLD 用于把打包80位BCD值传送到FPU寄存器堆栈中。
#
# fbld source
#
# source 是80位的内存位置
#

.section .data
data1:
    .byte 0x34, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
data2:
    .int 2

.section .text
.globl main
main:
    nop
    fbld data1
    fimul data2
    fbstp data1

    movl $1, %eax
    movl $0, %ebx
    int $0x80

# gcc -g -o 06-fbld 06-fbld.s -m32

# data1 定义的内存位置创建一个表示十进制值1234的简单的BCD值。
# fbld  把这个值加载到FPU寄存器堆栈的顶部(ST0)
# fimul 把ST0寄存器和data2所在的位置中的整数值相乘。
# fbstp 把堆栈中新的值传送回data1所在的内存位置中。

gdb -q -f 06-fbld
Reading symbols from 06-fbld...
(gdb) b 20
Breakpoint 1 at 0x119e: file 06-fbld.s, line 20.
(gdb) r
Starting program: /home/06-fbld

Breakpoint 1, main () at 06-fbld.s:20
/home/06-fbld.s:20:321:beg:0x5655619e
20              fbld data1
(gdb) s
/home/06-fbld.s:21:333:beg:0x565561a4
21              fimul data2
(gdb) x/10b &data1
0x56559008:     52      18      0       0       0       0       0       0
0x56559010:     0       0
(gdb) x/10bx &data1
0x56559008:     0x34    0x12    0x00    0x00    0x00    0x00    0x00    0x00
0x56559010:     0x00    0x00
(gdb) i all

st0            1234                (raw 0x40099a40000000000000)  // 1234被转换成浮点数

(gdb) s
/home/06-fbld.s:22:346:beg:0x565561aa
22              fbstp data1
(gdb) i all

st0            2468                (raw 0x400a9a40000000000000)

(gdb) s
/home/06-fbld.s:24:360:beg:0x565561b0
24              movl $1, %eax
(gdb) x/10bx &data1
0x56559008:     0x68    0x24    0x00    0x00    0x00    0x00    0x00    0x00
0x56559010:     0x00    0x00

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值