鱼C论坛

 找回密码
 立即注册
查看: 556|回复: 1

[汇编作业] 求助

[复制链接]
发表于 2023-11-20 08:43:43 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 liuyanjun 于 2023-11-21 10:06 编辑

求助,汇编语言利用循环指令计算任意三角形面积,要求三角形的底和高,通过键盘输入,面积值能够显示输出(用ASM软件进行编译的)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-20 19:22:32 | 显示全部楼层
sh-5.2$ cat main.s
    .section    .text

# long long atoq(const char *ptr);
atoq:
    xorq    %rax, %rax
    xorq    %rcx, %rcx
1:  movb    (%rdi), %cl
    cmpb    $'0', %cl
    jb      1f
    cmpb    $'9', %cl
    ja      1f
    subq    $'0', %rcx
    movq    $10, %rdx
    mulq    %rdx
    addq    %rcx, %rax
    incq    %rdi
    jmp     1b
1:  movq    %rdi, %rdx
    retq

# long long qtoa(char *ptr, long long value);
qtoa:
    movq    %rsi, %rax
    movq    %rdi, %rsi
    movq    $10, %rcx
1:  xorq    %rdx, %rdx
    divq    %rcx
    addq    $'0', %rdx
    movb    %dl, (%rdi)
    incq    %rdi
    cmpq    $0, %rax
    jne     1b
    movq    %rdi, %rax
    subq    %rsi, %rax
    decq    %rdi
1:  movb    (%rdi), %dh
    movb    (%rsi), %dl
    movb    %dh, (%rsi)
    movb    %dl, (%rdi)
    incq    %rsi
    decq    %rdi
    cmpq    %rsi, %rdi
    ja      1b
    retq

    .global     _start
_start:
    subq    $1024, %rsp

    movq    $0, %rax    # sys_read
    movq    $0, %rdi    # stdin
    movq    %rsp, %rsi  # buf
    movq    $1023, %rdx # count
    syscall

    # buf[--count] = '\0';
    decq    %rax
    movb    $0, (%rsp, %rax)

    movq    %rsp, %rdi
    callq   atoq
    movq    %rax, %r12
    movq    %rdx, %rdi
    incq    %rdi
    callq   atoq
    movq    %rax, %r13

    movq    %r12, %rax
    mulq    %r13

    movq    $2, %rcx
    divq    %rcx

    movq    %rsp, %rdi
    movq    %rax, %rsi
    callq   qtoa

    movb    $'\n', (%rsp, %rax)
    incq    %rax
    movq    %rax, %rcx

    movq    $1, %rax    # sys_write
    movq    $1, %rdi    # stdout
    movq    %rsp, %rsi  # buf
    movq    %rcx, %rdx  # count
    syscall

1:  movq    $60, %rax   # sys_exit
    xorq    %rdi, %rdi  # error_code
    syscall
    jmp     1b
sh-5.2$ as -g -o main.o main.s
sh-5.2$ ld -o main main.o
sh-5.2$ ./main
10 20
100
sh-5.2$ ./main
19 8
76
sh-5.2$ ./main
19 7
66
sh-5.2$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 19:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表