当前位置:编程学习 > 汇编语言 >>

汇编语言程序

TITLE 从键盘输入两位16进制数,输出其2进制数形式 data segment tt1 db 0h data ends stack segment para stack db 100 dup(?) stack ends code segment assume cs:code,ds:data,es:data,ss:stack sub1 proc far start: push ds mov ax,0 push ax mov ax,data mov ds,ax mov es,ax call sub4 mov cl,4 shl al,cl mov tt1,al call sub4 add al,tt1 mov cx,8 next: rol al,1 mov tt1,al and al,00000001 call sub2 mov al,ttl loop next ret SUB1 ENDP sub4 proc mov ah,1 int 21h cmp al,"9" ja qq1 sub al,30h jmp qq2 qq1: sub al,57h qq2: ret sub4 endp SUB2 PROC cmp al,9 ja g1 add al,"0" jmp g2 g1: add al,37h g2: mov dl,al mov ah,2 int 21h RET SUB2 ENDP code ends end start 帮忙修改一下这个程序,使其能按题目要求输出正确答案。然后将题目改为“输出其8进制数形势”,在原有程序的基础上改写(就是不要复杂的的指令代码,用到左循环就可以,我还是个汇编菜鸟)。非常感谢!!!
答案:二进制:data     segment
tt1      db     0h
data     ends
stack    segment  para stack
         db     100 dup(?)
stack    ends
code     segment
         assume  cs:code,ds:data,es:data,ss:stack
sub1     proc far
start:   push ds
         mov  ax,0
         push ax
         mov  ax,data
         mov  ds,ax
         mov  es,ax
         
         call sub4
         mov  cl,4
         shl  al,cl
         mov  tt1,al

         call sub4
         add  al,tt1
         
  	 mov  cx,8
next:	 rol  al,1
	 mov  tt1,al
         and  al,01h		;用二进制直接表示在下一个程序中出现问题,没有深究,改为16进

制表示了
	 call sub2
	 mov  al,tt1		;此处有错误
	 loop next
     
         ret
        
SUB1     ENDP  

sub4     proc
         mov ah,1
         int 21h
         cmp al,"9"
         ja  qq1
         sub al,30h
         jmp qq2
qq1:     sub al,57h		;默认输入小写字母
qq2:     ret
sub4     endp        



SUB2     PROC         
         add  al,"0"		;是0,1则不必判断与9的大小
         mov  dl,al 
         mov  ah,2
         int  21h
         
         RET
SUB2     ENDP      
code     ends
end      start
八进制:
data     segment
tt1      db     0h
data     ends
stack    segment  para stack
         db     100 dup(?)
stack    ends
code     segment
         assume  cs:code,ds:data,es:data,ss:stack
sub1     proc far
start:   push ds
         mov  ax,0
         push ax
         mov  ax,data
         mov  ds,ax
         mov  es,ax
         
         call sub4
         mov  cl,4
         shl  al,cl
         mov  tt1,al

         call sub4
         add  al,tt1
         
  	 mov  cx,2		;八进制就是二进制三位一组
	 rol  al,cl
	 mov  tt1,al
	 and  al,03h
	 call sub2
	 mov  al,tt1
next:	 rol  al,1
	 rol  al,1
	 rol  al,1
	 mov  tt1,al
         and  al,07h
	 call sub2
	 mov  al,tt1		
	 loop next
     
         ret
        
SUB1     ENDP  

sub4     proc
         mov ah,1
         int 21h
         cmp al,"9"
         ja  qq1
         sub al,30h
         jmp qq2
qq1:     sub al,57h
qq2:     ret
sub4     endp        



SUB2     PROC
         
         add  al,"0"
         mov  dl,al 
         mov  ah,2
         int  21h
         
         RET
SUB2     ENDP      
code     ends
其他:说实话,我以前也用汇编,现在改用keilc了,现在看到汇编就头大,建议你还是用c做吧 同样的问题?
http://zhidao.zhaoxi.net/question/340565352.html

上一个:在汇编语言中,编写一个程序段,在DX高4位全为0时,使AX=0:否则使A= - 1
下一个:汇编问题

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,