結果
| 問題 | No.272 NOT回路 |
| コンテスト | |
| ユーザー |
alpha_virginis
|
| 提出日時 | 2016-04-09 02:32:04 |
| 言語 | Assembler (nasm 2.16.03) |
| 結果 |
AC
|
| 実行時間 | 1 ms / 1,000 ms |
| コード長 | 3,982 bytes |
| コンパイル時間 | 144 ms |
| コンパイル使用メモリ | 5,376 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-11 23:18:12 |
| 合計ジャッジ時間 | 608 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 11 |
ソースコード
section .data
;;; ; static
hellow: db "Hello World!"
hellow_len: equ $ - hellow
section .bss
common stdinbuf 1048576:16
common stdinbuf_size 8:8
common stdinbuf_seek 8:8
common stdoutbuf 1048576:16
common stdoutbuf_size 8:8
section .text
global _start
_start:
call readstdin
call setupstdout
call nextInt
mov r10, rax
mov r9, 1
sub r9, r10
mov rdi, r9
call putInt
call newLine
call writestdout
mov rax, 60
mov rdi, 0
syscall
ret
readstdin:
mov rax, 0
mov rdi, 0
mov rsi, stdinbuf
mov rdx, 1048576
syscall
mov [stdinbuf_size], rax
mov rax, 0
mov [stdinbuf_seek], rax
ret
setupstdout:
mov rax, 0
mov [stdoutbuf_size], rax
ret
writestdout:
mov rax, 1
mov rdi, 1
mov rsi, stdoutbuf
mov rdx, [stdoutbuf_size]
syscall
ret
;;; ; ; rdi : dest
;;; ; ; rsi : src
;;; ; ; rdx : size
strncpy:
cmp rdx, 0
jne strncpy_L1
ret
strncpy_L1:
mov al, [rsi]
mov [rdi], al
add rsi, 1
add rdi, 1
sub rdx, 1
jne strncpy_L1
ret
;;; ; ; dil char
putChar:
mov rax, stdoutbuf
add rax, [stdoutbuf_size]
mov [rax], dil
mov rax, [stdoutbuf_size]
add rax, 1
mov [stdoutbuf_size], rax
ret
;;; ; ; rdi str
;;; ; ; rsi size
putStr:
cmp rsi, 0
jne putStr_L1
ret
putStr_L1:
mov rax, stdoutbuf
add rax, [stdoutbuf_size]
mov rdx, [stdoutbuf_size]
add rdx, rsi
mov [stdoutbuf_size], rdx
putStr_L2:
mov dl, [rdi]
mov [rax], dl
add rax, 1
add rdi, 1
sub rsi, 1
jne putStr_L2
ret
;;; ; ; rdi str
;;; ; ; rsi size
putStrLn:
push rdi
push rsi
call putStr
pop rsi
pop rdi
mov dil, 10
call putChar
ret
;;; ; ; return 8bit char
nextChar:
mov rdi, stdinbuf
add rdi, [stdinbuf_seek]
mov al, [rdi]
mov rdi, [stdinbuf_seek]
add rdi, 1
mov [stdinbuf_seek], rdi
ret
;;; ; ; return (64bit unsigned int)
nextInt:
mov rax, 0
nextInt_L1:
push rax
call nextChar
mov dil, al
pop rax
cmp dil, 48
jb nextInt_L2
cmp dil, 57
ja nextInt_L2
mov rsi, 10
mul rsi
movzx rcx, dil
sub rcx, 48
add rax, rcx
jmp nextInt_L1
nextInt_L2:
ret
;;; ; ; rdi 64bit int
putInt:
cmp rdi, 0
jne putInt_L0
mov dil, 48
call putChar
ret
putInt_L0:
mov rcx, 0
mov rax, rdi
putInt_L1:
cmp rax, 0
je putInt_L2
mov rdx, 0
mov rsi, 10
div rsi
push rdx
add rcx, 1
jmp putInt_L1
putInt_L2:
cmp rcx, 0
je putInt_L3
sub rcx, 1
pop rdi
add rdi, 48
push rcx
call putChar
pop rcx
jmp putInt_L2
putInt_L3:
ret
newLine:
mov dil, 10
call putChar
ret
alpha_virginis