Loop over multiple arrays simultaneously: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) (→{{header|Raku}}: add verbiage, show longhand operation) |
Not a robot (talk | contribs) (Add 8086 assembly) |
||
Line 71: | Line 71: | ||
c C 3 |
c C 3 |
||
</pre> |
</pre> |
||
=={{header|8086 Assembly}}== |
|||
The 8086 processor has two index registers <code>si</code> and <code>di</code>, |
|||
and an address register <code>bx</code>. (There is also the base pointer <code>bp</code>, |
|||
which is used to point to the stack segment, and is not used here.) |
|||
When addressing memory, the 8086 can automatically add up: 1) one of <code>bx</code> or |
|||
<code>bp</code>, plus 2) one of <code>si</code> or <code>di</code>, plus 3) |
|||
a direct address. |
|||
This code uses <code>si</code> to keep track of the current index, and loads the |
|||
base addresses of the arrays into <code>bx</code> one by one. |
|||
<lang asm> cpu 8086 |
|||
bits 16 |
|||
org 100h |
|||
section .text |
|||
mov ah,2 ; Tell MS-DOS to print characters |
|||
xor si,si ; Clear first index register (holds _i_) |
|||
outer: mov di,As ; Put array-of-arrays in second index register |
|||
mov cx,Aslen ; Put length in counter register |
|||
inner: mov bx,[di] ; Load array pointer into BX (address) register |
|||
mov dl,[bx+si] ; Get SI'th element from array |
|||
int 21h ; Print character |
|||
inc di ; Go to next array (pointers are 2 bytes wide) |
|||
inc di |
|||
loop inner ; For each array |
|||
mov dl,13 ; Print newline |
|||
int 21h |
|||
mov dl,10 |
|||
int 21h |
|||
inc si ; Increment index register |
|||
cmp si,Alen ; If it is still lower than the array length |
|||
jb outer ; Print the next items |
|||
ret |
|||
section .data |
|||
;;; Arrays |
|||
A1: db 'a','b','c' |
|||
A2: db 'A','B','C' |
|||
A3: db '1','2','3' |
|||
Alen: equ $-A3 ; Length of arrays (elements are bytes) |
|||
;;; Array of arrays |
|||
As: dw A1,A2,A3 |
|||
Aslen: equ ($-As)/2 ; Length of array of arrays (in words)</lang> |
|||
{{out}} |
|||
<pre>aA1 |
|||
bB2 |
|||
cC3 |
|||
</pre> |
|||
=={{header|ACL2}}== |
=={{header|ACL2}}== |