結果
| 問題 | No.3259 C++ → Rust → Python |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-09-06 13:29:18 |
| 言語 | Assembler (nasm 2.16.03) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,914 bytes |
| 記録 | |
| コンパイル時間 | 320 ms |
| コンパイル使用メモリ | 7,840 KB |
| 実行使用メモリ | 7,720 KB |
| 最終ジャッジ日時 | 2025-09-06 13:29:28 |
| 合計ジャッジ時間 | 3,655 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | RE * 3 |
| other | RE * 22 |
コンパイルメッセージ
ld: 警告: エントリシンボル _start が見つかりません。デフォルトとして 0000000000401000 を使用します
ソースコード
bits 64
section .note.GNU-stack
section .data
; msg db "Hello, world!", 10
; len equ $ - msg
section .text
;char read_char(void)
read_char:
xor rax, rax
xor rdi, rdi
lea rsi, [rsp-8]
mov rdx, 1
syscall
cmp rax, 1
jne read_char_error
mov al, [rsp-8]
ret
read_char_error:
mov rax, -1
ret
;int read_int(void)
read_int:
push rbp
mov rbp, rsp
sub rsp, 16
mov [rbp-8], rbx ;RBXを一時的な数値の置き場として使うので元の値を覚えておく
xor ebx, ebx
read_int_loop:
call read_char
cmp eax, '0'
jl read_int_end
cmp eax, '9'
jg read_int_end
sub eax, '0'
imul ebx, 10
add ebx, eax
jmp read_int_loop
read_int_end:
mov eax, ebx
mov rbx, [rbp-8]
leave
ret
;void print_char(char)
;RDIにcharが入っている
print_char:
mov rax, 1
mov [rsp-8], edi
mov rdi, 1
lea rsi, [rsp-8]
mov rdx, 1
syscall
cmp rax, 1
jne print_char_error
ret
print_char_error:
mov rax, -1
ret
;void println(void)
println:
mov edi, `\n`
call print_char
ret
;void print_int(int)
print_int:
mov eax, edi
mov r8, rsp
mov esi, 10
print_int_loop:
cdq
idiv esi
;商:EAX,余り:EDX
dec rsp
mov [rsp], dl
add [rsp], byte '0'
cmp eax, 0
jne print_int_loop
;出力
mov rax, 1
mov rdi, 1
mov rsi, rsp
mov rdx, r8
sub rdx, rsp
syscall
mov rsp, r8
ret
global main
main:
push rbp
mov rbp, rsp
sub rsp, 32
%define ans [rbp-8]
%define l [rbp-16]
%define r [rbp-24]
call read_int
mov l, eax
call read_int
mov r, eax
mov eax, 0
mov ans, eax
mov eax, r
cmp eax, 296
jl skip
mov eax, l
cmp eax, 295
jg skip
mov eax, ans
add eax, 1
mov ans, eax
skip:
mov eax, r
cmp eax, 417
jl skip2
mov eax, l
cmp eax, 416
jg skip2
mov eax, ans
add eax, 1
mov ans, eax
skip2:
mov edi, ans
call print_int
call println
;終了
mov rax, 60
xor rdi, rdi
syscall