;; ------------------------------------------------ ;; 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