實驗三 輸出20之內數的平方值優化
題目:輸入一個0到19的數字,輸出這個數的平方值spa
要求:1.以十進制輸出調試
2.平方值能夠事先存放在表單中code
3.輸入範圍越界要有錯誤提示索引
4.能夠重複輸入,直至輸入空格爲止it
個人思路:把0-19的平方值,放在一段存儲區(必定要以字爲單位,由於一個字節最大爲255),按照0^2,1^2.......19^2的順序,這樣能夠方便索引,好比輸入5,則其平方值在表單中偏移地址爲5*2,這樣就能夠以 BUF[EBP*2](BUF爲表單首地址,EBP爲輸入的數值)尋址獲得相應的平方值。而後的問題就是,咱們以十號調用輸入的爲一個個字符,這樣就要想辦法把這一串數字符轉換爲十進制數,能夠講每一個數字字符減去30H轉換爲數字而後求加權和(即乘十循環),存起來放到EBP,最後一個問題就是將在表單中索引到的十進制平方值,除10去餘存放到一個指定的存儲區,注意倒着存儲,即先獲得的餘數在存儲區下面。最後將此存儲區內的內容輸出便可。固然這中間的會遇到不少細節的問題,須要耐心調試,精心分析。作好基本符合要求的程序後,最後稍加優化,在細節上加以改進便可,固然也能夠本身再添加一些功能。class
另外一種思路是,將平方值以字符的形式存放到表單中,這樣知道輸入的數值後能夠直接在表單中查找到輸出,不須要取餘轉化,可是我的感受前一種思路更可以鍛鍊本身的彙編能力。變量
;功能:輸入一個0~19的整數,輸出其平方值 ;做者:KDF5000 ;時間:2012.11.9 .386 DATA SEGMENT USE16 SQUARE DW 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361 ;存入0~19的平方值便於查詢 INPUT DB 8 DB ? DB 8 DUP('$') ;次緩衝區用於存放輸入的值 DB 5 DUP('$') OUTPUT DB '$' ;此區存放平方值的輸出 ERROR DB '請輸入一個0-19範圍的數!$' MESSAGE DB '請輸入0-19範圍的數:$' RESULT DB 0DH,0AH,' 其平方值爲:$' EXITMES DB 0DH,0AH,'謝謝你的使用!',0DH,0AH,'$' HUANHANG DB 0DH,0AH,'$' DATA ENDS STACK SEGMENT USE16 STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT USE16 ASSUME DS:DATA,CS:CODE,SS:STACK BEGIN: MOV AX,DATA MOV DS,AX ;輸出提示信息 LEA DX,MESSAGE MOV AH,9 INT 21H ; 輸入數值 LEA DX,INPUT MOV AH,10 INT 21H ;若是輸入空格則推出程序 MOV AL,INPUT+2 CMP AL,20H JE EXIT ;取出輸入的數值 LEA SI,INPUT+2 MOV AX,0 MOV BL,10 MOV CL,INPUT+1 ;記錄循環的次數 ;將輸入的值放到AX LOPA: MOV DL,[SI] DEC CL SUB DL,30H MUL BL ADD AX,DX INC SI CMP CL,0 JE NEXT JMP LOPA NEXT: ;若是輸入的數字大於十九或者小於小於0報錯 CMP AX,19 JG ERROR1 CMP AX,0 JB ERROR1 MOV BP,AX ;將輸入的數據做爲變量 MOV AX,SQUARE[EBP*2] ;此時AX存放平方值 MOV CL,10 ;設置除數 MOV SI,OFFSET OUTPUT LOPB: ;次循環爲把已經存入的平方值轉換爲十進值輸出 DEC SI DIV CL ADD AH,30H MOV [SI],AH MOV AH,0 CMP AL,0 JNE LOPB ;輸出結果提示 LEA DX,RESULT MOV AH,9 INT 21H ;輸出十進制平方值 MOV DX,SI MOV AH,9 INT 21H ;輸出換行 LEA DX,HUANHANG MOV AH,9 INT 21H ;跳到開始繼續輸入 JMP BEGIN ERROR1: LEA DX,HUANHANG MOV AH,9 INT 21H LEA DX,ERROR MOV AH,9 INT 21H LEA DX,HUANHANG MOV AH,9 INT 21H JMP BEGIN EXIT: LEA DX,EXITMES ;輸出退出信息 MOV AH,9 INT 21H MOV AH,4CH INT 21H CODE ENDS END BEGIN