1. 程式人生 > >組合語言:鍵盤錄入五個整數,程式設計實現求和

組合語言:鍵盤錄入五個整數,程式設計實現求和

要求:

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