Do you have a use case for writing a whole assembly program in a .swift file 
rather than in an assembly file?

> Le 3 déc. 2016 à 15:12, Ethin Probst via swift-evolution 
> <[email protected]> a écrit :
> 
> Hello all,
> My name is Ethin and I am new to this community. However, I certainly
> am no newbie when it comes to software development, and have emailed
> all of you to file a proposal of inline assembly in Swift. The
> assembly language would be within an asm {...} block. The asm keyword
> could also take an optional argument: the type of assembler to use. As
> there are many different types of assemblers out there, I thought this
> should be implemented as well. Furthermore, the asm keyword could also
> take a second optional argument: the extra arguments to pass to the
> assembler. The full syntax of the keyword would look something like:
> asm (assembler, assembler_args)
> {
>    // asm goes here...
> }
> For instance, below is a hello world application in NASM assembly
> language (taken from Wikipedia) with no extra arguments for Linux:
> asm ("nasm")
> {
> global _start
> 
> section .text
> _start:
>       mov     eax, 4 ; write
>       mov     ebx, 1 ; stdout
>       mov     ecx, msg
>       mov     edx, msg.len
>       int     0x80   ; write(stdout, msg, strlen(msg));
> 
>       mov     eax, 1 ; exit
>       mov     ebx, 0
>       int     0x80   ; exit(0)
> 
> section .data
> msg:  db      "Hello, world!", 10
> .len: equ     $ - msg
> }
> And here is one for Mac OS X with the -G, -Fstabs, and -felf arguments to 
> nasm:
> asm ("nasm", "-G -Fstabs -felf")
> {
> global _start
> 
> section .data
> 
>       query_string:           db      "Enter a character:  "
>       query_string_len:       equ     $ - query_string
>       out_string:                     db      "You have input:  "
>       out_string_len:         equ     $ - out_string
> 
> section .bss
> 
>       in_char:                        resw 4
> 
> section .text
> 
> _start:
> 
>       mov     rax, 0x2000004          ; put the write-system-call-code into 
> register rax
>       mov     rdi, 1                          ; tell kernel to use stdout
>       mov     rsi, query_string       ; rsi is where the kernel expects to 
> find the
> address of the message
>       mov     rdx, query_string_len   ; and rdx is where the kernel expects to
> find the length of the message
>       syscall
> 
>       ; read in the character
>       mov     rax, 0x2000003          ; read system call
>       mov     rdi, 0                          ; stdin
>       mov     rsi, in_char            ; address for storage, declared in 
> section .bss
>       mov     rdx, 2                          ; get 2 bytes from the kernel's 
> buffer (one for the
> carriage return)
>       syscall
> 
>       ; show user the output
>       mov     rax, 0x2000004          ; write system call
>       mov     rdi, 1                          ; stdout
>       mov     rsi, out_string
>       mov     rdx, out_string_len
>       syscall
> 
>       mov     rax, 0x2000004          ; write system call
>       mov     rdi, 1                          ; stdout
>       mov     rsi, in_char
>       mov     rdx, 2                          ; the second byte is to apply 
> the carriage return
> expected in the string
>       syscall
> 
>       ; exit system call
>       mov     rax, 0x2000001          ; exit system call
>        xor     rdi, rdi
>       syscall
> }
> Again, both assembly language examples were taken from Wikipedia. I am
> no asm expert, I assure you, and with the lack of material available
> on assembly language these days... it's quite hard to learn it. I
> thank you for taking your time to read this proposal and have a nice
> day!
> -- 
> Signed,
> Ethin D. Probst
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to