1.5分支程序

实验任务一:二进制到ASCII码的转换

在DATA单元存放着一个8位二进制码,将其按位转换成一串ASCII码,即'1'转换成'1'的ASCII码31H;'0'转换成30H。并依此存放在以STRING开始的RAM区中(高位在前地位在后)。

代码:

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;This program is created by LiZhuYang(LzySeed) 转载请注明出处;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
assume cs:code,ds:data,ds:table,ss:stack
stack segment
 db 512 dup(?)
stack ends

data segment
 db 6Bh                     
data ends

table segment
 db '                      '
table ends

code segment
   start: mov ax,stack
       mov ss,ax
       mov sp,512
       mov ax,data
       mov ds,ax
       mov ax,ds:[0]
       mov si,0
       mov di,7
          call change
      
       mov dh,4
       mov dl,5
       mov si,0
       call show_str
          mov ax,4c00h
          int 21h
  change: push cx                        ;此函数完成二进制致ASCII码的转换   
          push bx
          push ax
          push si
          push di
          mov bx,10000000B
          mov cx,8
 change_s:push cx
          mov cx,di
          push ax
          push ax
          mov ax,table
          mov ds,ax
          pop ax
          and ax,bx
          shr bx,1
          shr ax,cl
          add al,30h
          mov [si],al
          dec di
          inc si
          pop ax
          pop cx
          loop change_s 
          pop di
          pop si
          pop ax
          pop bx
          pop cx
          ret
         
         
show_str: push ax                        ;此函数是用来将数据写入缓存中
          push dx
          push cx
show_str1:mov ax,table
       mov ds,ax
       sub dh,1
       mov al,dh
       add dh,1
       mov bl,160
       mul bl
       mov es:[0],ax
       sub dl,1
       mov al,dl
       add dl,1
       mov bl,2
       mul bl
       add ax,es:[0]
       mov bx,0B800h
       mov es,bx
       mov bx,ax
       mov cl,[si]
       mov ch,0
       jcxz ok
       mov al,[si]
       add bx,si
       add bx,si
       mov es:[bx],al
       add bx,1
       mov es:[bx],72H
       inc si
       jmp show_str1
    ok:pop cx
       pop dx
       pop ax
       ret
      
 
code ends
end start

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 实验任务二:ASCII码到十进制的转换

     从STRING1单元开始,存放一串ASCII码字符(其字符长为十六个字节,每一

个ASCII码占一个字节)。ji将STRING1中每个字符转换成与之对应的十进制数字,

并存放在以STRING2开始的区中(每个十进制数字占一个字节)。如果某一个ASCII

码不是0-9之间的数,则将STRING2字串中对应单元置为FF。

代码:

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;This program is created by LiZhuYang(LzySeed) 转载请注明出处;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
assume cs:code,ds:string1,ds:string2,ss:stack
stack segment
 db 512 dup(?)
stack ends

string1 segment
 db '123F56A890C23D56',0                  
string1 ends

string2 segment
    db 20 dup(0)
string2 ends
code segment
 start:mov ax,stack
    mov ss,ax
    mov sp,512
    mov si,0
    call _change
    mov ax,4c00h
    int 21h
  _change:push cx
          push ax
          push si
          mov cx,16
    sc:mov ax,string1
    mov ds,ax
       mov al,ds:[si]
    cmp al,39h
    ja  _okc
    cmp al,30h
    jb  _okc
    sub al,30h
   _okc1: push ax
    mov ax,string2
    mov ds,ax
    pop ax
          mov ds:[si],al
          inc si
          loop sc
    pop si
    pop ax
    pop cx
    ret
  
    _okc: mov al,0ffh
        jmp _okc1
        
code ends
end start


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值