szktty #5224(2008/01/08 07:30 GMT) [ Other ] Rating0/0=0.00
Mac OS X (PowerPC 32bit) アセンブリで。あまりスマートではありませんが。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
;; ------------------------------------------------ ;; alphanext.s for Mac OS X (PowerPC 32bit) ;; % as -o alphanext.o alphanext.s ;; % gcc alphanext.o -o alphanext ;; ------------------------------------------------ .machine ppc .globl _main ;; スタックにレジスタを退避するマクロ .macro PUSH stwu r3, -4(r1) stwu r4, -4(r1) stwu r5, -4(r1) stwu r6, -4(r1) stwu r7, -4(r1) stwu r8, -4(r1) stwu r9, -4(r1) stwu r10, -4(r1) mflr r15 stwu r15, -4(r1) .endmacro ;; スタックからレジスタを復帰するマクロ .macro POP lwz r15, 0(r1) mtlr r15 lwzu r10, 4(r1) lwzu r9, 4(r1) lwzu r8, 4(r1) lwzu r7, 4(r1) lwzu r6, 4(r1) lwzu r5, 4(r1) lwzu r4, 4(r1) lwzu r3, 4(r1) addi r1, r1, 4 .endmacro ;; スタック退避つきサブルーチン呼び出し .macro CALL PUSH bl $0 POP .endmacro ;; r7: 表示する最大値 ;; r8: 現在表示中の数値 ;; r9: アルファベット _main: li r7, 100 li r8, 0 li r10, 26 _write_alpha: lis r4, hi16(temp) addi r4, r4, lo16(temp) li r5, 1 mr r11, r4 divw r9, r8, r10 ; i / 26 cmpli cr7, r9, 0 beq cr7, _write_alpha_rest addi r9, r9, 64 ; ASCII stb r9, 0(r11) subi r9, r9, 64 addi r11, r11, 1 addi r5, r5, 1 _write_alpha_rest: mullw r9, r9, r10 sub r9, r8, r9 addi r9, r9, 65 ; ASCII stb r9, 0(r11) ;; 出力 PUSH li r3, 1 li r0, 4 ; sys_write() sc POP ;; 繰り返し addi r8, r8, 1 cmpl cr7, r7, r8 ble cr7, _write_end ;; 区切り文字 li r3, 1 lis r4, hi16(sep) addi r4, r4, lo16(sep) li r5, 2 li r0, 4 ; sys_write() PUSH sc POP b _write_alpha _write_end: li r3, 1 lis r4, hi16(lf) addi r4, r4, lo16(lf) li r5, 1 li r0, 4 ; sys_write() sc ;; sys_exit() li r3, 0 li r0, 1 sc .data .align 2 temp: .asciz " " .align 2 sep: .asciz ", " .align 2 lf: .asciz "\n" .align 2
Rating0/0=0.00-0+
[ reply ]
szktty
#5224()
[
Other
]
Rating0/0=0.00
Mac OS X (PowerPC 32bit) アセンブリで。あまりスマートではありませんが。
;; ------------------------------------------------ ;; alphanext.s for Mac OS X (PowerPC 32bit) ;; % as -o alphanext.o alphanext.s ;; % gcc alphanext.o -o alphanext ;; ------------------------------------------------ .machine ppc .globl _main ;; スタックにレジスタを退避するマクロ .macro PUSH stwu r3, -4(r1) stwu r4, -4(r1) stwu r5, -4(r1) stwu r6, -4(r1) stwu r7, -4(r1) stwu r8, -4(r1) stwu r9, -4(r1) stwu r10, -4(r1) mflr r15 stwu r15, -4(r1) .endmacro ;; スタックからレジスタを復帰するマクロ .macro POP lwz r15, 0(r1) mtlr r15 lwzu r10, 4(r1) lwzu r9, 4(r1) lwzu r8, 4(r1) lwzu r7, 4(r1) lwzu r6, 4(r1) lwzu r5, 4(r1) lwzu r4, 4(r1) lwzu r3, 4(r1) addi r1, r1, 4 .endmacro ;; スタック退避つきサブルーチン呼び出し .macro CALL PUSH bl $0 POP .endmacro ;; r7: 表示する最大値 ;; r8: 現在表示中の数値 ;; r9: アルファベット _main: li r7, 100 li r8, 0 li r10, 26 _write_alpha: lis r4, hi16(temp) addi r4, r4, lo16(temp) li r5, 1 mr r11, r4 divw r9, r8, r10 ; i / 26 cmpli cr7, r9, 0 beq cr7, _write_alpha_rest addi r9, r9, 64 ; ASCII stb r9, 0(r11) subi r9, r9, 64 addi r11, r11, 1 addi r5, r5, 1 _write_alpha_rest: mullw r9, r9, r10 sub r9, r8, r9 addi r9, r9, 65 ; ASCII stb r9, 0(r11) ;; 出力 PUSH li r3, 1 li r0, 4 ; sys_write() sc POP ;; 繰り返し addi r8, r8, 1 cmpl cr7, r7, r8 ble cr7, _write_end ;; 区切り文字 li r3, 1 lis r4, hi16(sep) addi r4, r4, lo16(sep) li r5, 2 li r0, 4 ; sys_write() PUSH sc POP b _write_alpha _write_end: li r3, 1 lis r4, hi16(lf) addi r4, r4, lo16(lf) li r5, 1 li r0, 4 ; sys_write() sc ;; sys_exit() li r3, 0 li r0, 1 sc .data .align 2 temp: .asciz " " .align 2 sep: .asciz ", " .align 2 lf: .asciz "\n" .align 2Rating0/0=0.00-0+
[ reply ]