月別アーカイブ: 2017年8月

[nasm]四則演算

add,sub,mul,divを用いて演算を行う。
もちろん出力はASCIIコードで31hが1となるように計算。

結果は
5
1
6
3
と表示される

bits 64
section .text

global _main
_main:

	;足し算 5を出力
	mov rbx, 33h
	mov rcx, 02h
	add rbx, rcx
	push rbx
	mov rdx, 02h
	lea rsi, [rsp] ;link stack point adress to rsi
	mov rax, 0x2000004
	mov rdi, 1
	syscall

	xor rbx,rbx
	mov rbx, 10d
	push rbx
	mov rdx, 02h
	lea rsi, [rsp] ;link stack point adress to rsi
	mov rax, 0x2000004
	mov rdi, 1
	syscall

	;引き算 1を出力
	mov rbx, 33h
	mov rcx, 02h
	sub rbx, rcx
	push rbx
	mov rdx, 02h
	lea rsi, [rsp] ;link stack point adress to rsi
	mov rax, 0x2000004
	mov rdi, 1
	syscall

	xor rbx,rbx
	mov rbx, 10d
	push rbx
	mov rdx, 02h
	lea rsi, [rsp] ;link stack point adress to rsi
	mov rax, 0x2000004
	mov rdi, 1
	syscall

	;掛け算mulは引数をraxと掛けてraxに格納
	mov rax, 3
	mov rbx, 2
	mul rbx  
	add rax,30h
	push rax
	mov rdx, 02h
	lea rsi, [rsp] ;link stack point adress to rsi
	mov rax, 0x2000004
	mov rdi, 1
	syscall

	xor rbx,rbx
	mov rbx, 10d
	push rbx
	mov rdx, 02h
	lea rsi, [rsp] ;link stack point adress to rsi
	mov rax, 0x2000004
	mov rdi, 1
	syscall

	;割り算 divは引数でraxを割ってraxに格納
	mov rax, 6
	mov rbx, 2
	div rbx  
	add rax,30h
	push rax
	mov rdx, 02h
	lea rsi, [rsp] ;link stack point adress to rsi
	mov rax, 0x2000004
	mov rdi, 1
	syscall

	xor rbx,rbx
	mov rbx, 10d
	push rbx
	mov rdx, 02h
	lea rsi, [rsp] ;link stack point adress to rsi
	mov rax, 0x2000004
	mov rdi, 1
	syscall


	mov rax, 0x2000001
	mov rdi, 0
	sys call

コマンドによる簡易タイマー

applescriptを用いたシェルスクリプト

timer.sh

#!/bin/sh                                                                                        
osascript << EOF
tell application "Finder" 
activate
display alarm ("test")
end tell
EOF

$sleep 600;./timer.sh
で10分後にメッセージが表示される。

デスクワークで10分置きに想起して記憶術に用いたり、
断続的に目の休憩を取るのを忘れないなど、
使い勝手は非常に良い。

[nasm]文字を一文字ずつ出力

文字を一文字ずつ表示することで、レジスタやスタックの扱いに慣れる。

<解説>
基本はraxにシステムコール、それ以外で引数を入力。
rax0x2000004は標準出力で、
rbxに文字を一文字ASCIIの16進数で格納。
rsiは直接代入できないらしく、rbxをpushでスタックに格納して、leaで参照させている。
引数が全て揃ったらsyscallで実行。

bits 64
section .text

global _main
_main:
	mov rax, 0x2000004
	mov rbx, 32h
	mov rdx, 01h
	mov rdi, 1
	push rbx
	lea rsi, [rsp]
	syscall

	mov rax, 0x2000004
	mov rbx, 0ah
	mov rdx, 01h
	mov rdi, 1
	push rbx
	lea rsi, [rsp]
	syscall

	mov rax, 0x2000001
	mov rdi, 0
	syscall