07月19日, 2015 4,374 次查看次
汇编九九乘法表-数字版
运行截图:
(东北大学汇编语言程序设计作业)
课程教材为Kip R. Irvine著的Intel汇编语言程序设计,作业中引用了作者写好的库。若想不依赖该库,自行替换程序中输出部分即可。
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 | include Irvine32.inc .data i DWORD 0 j DWORD 0 res DWORD 0 .code main PROC mov ecx,9 L1: push ecx neg ecx add ecx,10 mov i,ecx L2: push ecx neg ecx add ecx,i inc ecx mov j,ecx mov eax,i mov ebx,j mul ebx mov res,eax mov eax,j call WriteDec mov eax,'*' call WriteChar mov eax,i call WriteDec mov eax,'=' call WriteChar mov eax,res call WriteDec mov eax,' ' call WriteChar pop ecx LOOP L2 pop ecx mov eax,0Ah call WriteChar LOOP L1 exit main endp END main |
中文数字混合版:
(中文版代码显得不是特别规整,特殊情况较多,仅作为一种试验吧)
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 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 | ;描述:打印九九乘法表 ;作者:段育凯 INCLUDE Irvine32.inc OutputHanChar MACRO num push edx mov edx,OFFSET str1-4 push num sal num,2 add edx,num call WriteString pop num pop edx ENDM MainRun MACRO showstyle mov ecx,9;外层循环,循环每行 L1: push ecx neg ecx add ecx,10 mov i,ecx L2: push ecx neg ecx add ecx,i inc ecx;计算i-ecx+1,即从1循环到i mov j,ecx mov eax,i mul ecx mov result,eax;乘积在result中 ;call OutputNum ;call OutputHan call showstyle pop ecx LOOP L2 mov eax,0Ah call WriteChar pop ecx LOOP L1 ENDM .data str0 BYTE 0,0,0,0 str1 BYTE '一',0,0 str2 BYTE '二',0,0 str3 BYTE '三',0,0 str4 BYTE '四',0,0 str5 BYTE '五',0,0 str6 BYTE '六',0,0 str7 BYTE '七',0,0 str8 BYTE '八',0,0 str9 BYTE '九',0,0 str10 BYTE '十',0,0 stris BYTE '得',0,0 strinfo BYTE 0Ah,'作者:段育凯 20144569 任意键退出...',0 i DWORD 0;外层循环 j DWORD 0;内层循环 result DWORD 0;结果 unit DWORD 0;个位 decade DWORD 0;十位 consoleHandle HANDLE 0 coordSize COORD <96,26> smallRect SMALL_RECT <0,0,95,20> .code main PROC INVOKE GetStdHandle,STD_OUTPUT_HANDLE mov consoleHandle,eax INVOKE SetConsoleScreenBufferSize,consoleHandle,coordSize INVOKE SetConsoleWindowInfo,consoleHandle,1,OFFSET smallRect call OutputNum call OutputHan mov edx,OFFSET strinfo call WriteString call ReadChar exit main ENDP OutputNum PROC MainRun OutputNumCell ret OutputNum endp OutputHan PROC MainRun OutputHanCell ret OutputHan endp OutputNumCell PROC mov eax,j call WriteDec mov eax,'*' call WriteChar mov eax,i call WriteDec mov eax,'=' call WriteChar cmp result,10 jnb big mov eax,' ' call WriteChar big: mov eax,result call WriteDec mov eax,' ' call WriteChar ret OutputNumCell endp OutputHanCell PROC ;第一个数字 OutputHanChar j ;第二个数字 OutputHanChar i ;先计算十位和百位 ;十位 push result mov eax,result cdq mov ebx,10 idiv ebx mov decade,eax pop result ;百位 push decade mov eax,result mov unit,eax mov eax,decade mov ebx,10 mul ebx sub unit,eax mov eax,unit pop decade ;是否有“得”字 cmp result,10 jnb big1 mov edx,OFFSET stris call WriteString jmp single big1: ;"一十"特殊处理 cmp result,10 jne big2 mov edx,OFFSET str1 call WriteString mov edx,OFFSET str10 call WriteString mov eax,' ' call WriteChar jmp quit big2: ;处理、输出十位 cmp decade,2 jb small1 OutputHanChar decade small1: ;输出“十” mov eax,10 OutputHanChar eax single: ;输出个位 OutputHanChar unit mov eax,' ' call WriteChar cmp j,3 jb quit cmp unit,0 je moreSpace cmp decade,1 je moreSpace jmp quit moreSpace: mov eax,' ' call WriteChar call WriteChar quit: ret OutputHanCell endp END main |