結果

問題 No.3259 C++ → Rust → Python
ユーザー 横山緑
提出日時 2025-09-06 13:31:39
言語 Assembler
(nasm 2.16.03)
結果
AC  
実行時間 1 ms / 2,000 ms
コード長 1,919 bytes
コンパイル時間 388 ms
コンパイル使用メモリ 7,972 KB
実行使用メモリ 7,716 KB
最終ジャッジ日時 2025-09-06 13:31:43
合計ジャッジ時間 1,023 ms
ジャッジサーバーID
(参考情報)
judge / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 22
権限があれば一括ダウンロードができます

ソースコード

diff #

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 _start 
_start :
	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
0