Watch the course from the beginning: • Learn Assembly For Beginners | Introductio...
Previous Video in Course: • Objects in Assembly | Beginner Tutorial | ...
Follow along with me in the x64Playground: https://x64.halb.it (Select GNU as the Assembler!)
CODE TO COPY/PASTE:
;###############
;# CODE START
;##################
.intel_syntax noprefix
.global _start
.text
_start:
lea rdi, [buf]
lea rsi, [bufsize]
call readline
cmp rax, 0
je _start
lea rdi, [buf]
lea rsi, [tokens]
call tokenize
lea rdi, [tokens]
mov rdi, [rdi]
lea rsi, [s_cmd_exit]
call strcmp ;# rax == 0 if strings match
je exit
lea rdi, [tokens]
mov rdi, [rdi]
lea rsi, [s_cmd_echo]
call strcmp
je select.echo
lea rdi, [tokens]
mov rdi, [rdi]
lea rsi, [s_cmd_help]
call strcmp
je select.help
lea rdi, [s_nocommand]
call println
jmp _start
select.help:
call help
jmp _start
select.echo:
lea rdi, [tokens + 8]
call echo
jmp _start
help:
lea rdi, [s_help]
call print
ret
echo:
mov r15, rdi
echo.loop:
mov rdi, [r15]
cmp rdi, 0
je echo.ret
call print
lea rdi, [space]
call print
add r15, 8
jmp echo.loop
echo.ret:
lea rdi, [newline]
call print
ret
strcmp: ;# args: rdi s1, rsi s2
xor rax, rax
mov al, [rdi]
mov dl, [rsi]
cmp al, dl
jne sc.done
cmp al, 0
je sc.done
inc rdi
inc rsi
jmp strcmp
sc.done:
sub al, dl
ret
strncmp: ;# args: rdi s1, rsi s2, rdx len
mov rcx, rdx
snc.loop:
dec rcx
mov al, [rdi]
mov dl, [rsi]
cmp al, dl
jne snc.done
cmp al, 0
je snc.done
cmp rcx, 0
je snc.done
inc rdi
inc rsi
jmp snc.loop
snc.done:
sub al, dl
ret
nodata:
lea rdi, [s_nodata]
call print
call exit
print_tokens:
lea r15, [tokens]
pt.loop:
mov rdi, [r15]
cmp rdi, 0
je pt.end
call println
add r15, 8
jmp pt.loop
pt.end:
ret
tokenize: ;# arg1: rdi (string), arg2: rsi (arr)
mov r15, rsi
tokenize.loop:
call skipwhite
cmp byte ptr [rdi], 0x0
je tokenize.end
mov [r15], rdi
add r15, 8
call findend
cmp byte ptr [rdi], 0
je tokenize.end
mov byte ptr [rdi], 0
inc rdi
jmp tokenize.loop
tokenize.end:
mov qword ptr [r15], 0
ret
findend:
cmp byte ptr [rdi], ' '
je findend.ret
cmp byte ptr [rdi], 0
je findend.ret
inc rdi
jmp findend
findend.ret:
ret
skipwhite:
cmp byte ptr [rdi], ' '
je skipwhite.advance
ret
skipwhite.advance:
inc rdi
jmp skipwhite
exit:
xor rdi, rdi
mov rax, 60
syscall
print:
push rdi
call slen
pop rsi
mov rdx, rax
mov rax, 1
mov rdi, 1
syscall
ret
println:
push rdi
call slen
pop rsi
mov rdx, rax
mov rax, 1
mov rdi, 1
syscall
mov rax, 1
mov rdi, 1
lea rsi, [newline]
mov rdx, 1
syscall
ret
slen:
xor rcx, rcx
slen.loop:
mov al, [rdi + rcx]
cmp al, 0
je slen.ret
inc rcx
jmp slen.loop
slen.ret:
mov rax, rcx
ret
readline:
lea rdx, [rsi - 1]
mov rsi, rdi
mov rax, 0
mov rdi, 0
syscall
mov byte ptr [rsi + rax], 0
ret
memview:
mov r14, rsp
lea rsp, [buf]
int3
mov rsp, r14
ret
.data
buf: .skip 128, 0xaa
bufsize = . - buf
tokens: .skip 128, 0xbb
newline: .asciz "\n"
space: .asciz " "
s_nodata: .asciz "\nNo data entered!\n"
s_nocommand: .asciz "\nUnsupported command!\n"
s_cmd_exit: .asciz "exit"
s_cmd_echo: .asciz "echo"
s_cmd_help: .asciz "help"
s_help: .asciz "\nSupported commands:\n1 echo\n2 exit\n3 help (this function)\n"
;#########
;# CODE END
;#########
00:00 our tiny shell
1:00 parsed input
02:14 making our command table
03:18 visual look at our array
04:11 adding our loop
06:35 incrementing per element
07:05 selecting the function pointer member
Auf dieser Seite können Sie das Online-Video Building a Command Table in Assembly | Beginner Tutorial | x86-64 Assembly Programming Course mit der Dauer stunde minuten sekunde in guter Qualität ansehen, das der Benutzer Mxy 18 Januar 2026 hochgeladen hat, den Link mit Freunden und Bekannten teilen, dieses Video wurde auf Youtube bereits 1,879 Mal angesehen und es wurde von 92 den Zuschauern gefallen. Viel Spaß beim Betrachtenden Zuschauern gefallen!