汇编语言:键盘录入8个16进制数,求出其中最大值并以16进制输出

要求:

1.   掌握loop指令及循环程序设计方法。

2.   掌握输入/输出代码编写。

3.   学习移位指令的应用。


代码:

assume cs:codesg
codesg segment			;键盘输入8个16进制数(每个数二进制8位,即16进制2位),求出其中最大值并以16进制输出
		mov cx,8h
		mov bh,0		;bh是最大值

s:		mov ah,01h
		mov bl,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
		cmp bl,bh		;和bh(最大值)比较
		jbe c			;bl<=bh(最大值)时转移去c
		mov bh,bl		;更新bh(最大值)的值
c:		loop s

		mov bl,bh
		mov bh,0
		
		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 


汇编语言:键盘录入8个16进制数,求出其中最大值并以16进制输出_第1张图片

你可能感兴趣的:(汇编语言:键盘录入8个16进制数,求出其中最大值并以16进制输出)