組合語言:鍵盤錄入五個整數,程式設計實現求和
阿新 • • 發佈:2019-02-19
要求:
1. 檢視CPU和記憶體,用機器指令和彙編指令程式設計,檢視對應機器指令
2. 學習程式設計,編譯,連線,跟蹤;
3. 要求編譯連結後用debug跟蹤執行
程式碼:
assume cs:codesg codesg segment ;鍵盤輸入5個8位的16進位制數(每個數8位二進位制,即2位十六進位制),累加求和輸出 和為16位 mov dx,0 ;這裡存放累加和 mov cx,5h s: mov ah,01h mov bx,0 int 21h ;輸入 cmp al,41h jb a ;小於41H的數,即小於'A',為數字,跳轉到a sub al,7h a: sub al,30h ;從ascll碼變成數字 add bl,al ;放進bl mov ah,01h int 21h ;輸入第二次 cmp al,41h jb b ;小於41H的數,即小於'A',為數字,跳轉到b sub al,7h b: sub al,30h ;從ascll碼變成數字 shl bl,1 ;左移bl,騰出位置給輸入位累加 shl bl,1 shl bl,1 shl bl,1 add bl,al ;放進bl add dx,bx ;bx高位bh本身就是0 loop s mov bx,dx MOV AH,02H MOV DL,0DH INT 21H ;回車 MOV AH,02H MOV DL,0AH INT 21H ;換行 MOV CH,4 ;輸出Bx ROTATE: MOV CL,4 ROL BX,CL ;把bx最高四位迴圈左移到最低四位 MOV AL,BL ;取出位移後的bl AND AL,0FH ;取出al低四位,即上次bx的最高四位,這裡是反向輸出,先輸出高位,再輸出低位 ADD AL,30H ;加上30H ,開始轉變為ascll碼,其實這裡也可以用or AL,30H,還能更快 CMP AL,3AH ;比較AL,和10的ascll碼 JL PRINTIT ;JL小於轉移,用於有符號數的比較,AL<3AH (為數字)則跳轉 ADD AL,7H ;走到此處說明為字母,則加7變為字母的ascll PRINTIT:MOV DL,AL ;將待輸出的ascll碼放入DL MOV AH,2 ;2號功能,字元輸出 INT 21H ;2號功能,字元輸出,輸出DL的ascll碼 DEC CH ;ch -- JNZ ROTATE ;運算結果標誌位 ZF!=0 則轉移 mov ax,4c00h int 21h codesg ends end