shl,shr 移位处理字模提取的数据

来源:互联网 发布:美工师 编辑:程序博客网 时间:2024/04/26 03:05
 

assume cs:code
data segment
DB 002H,000H,012H,000H,002H,000H,012H,010H,002H,010H,022H,030H,07FH,0F8H,062H,0C0H
DB 042H,010H,0A3H,000H,042H,011H,02EH,008H,042H,010H,022H,008H,042H,010H,021H,0F8H
DB 07FH,0F0H,024H,000H,002H,000H,004H,000H,002H,001H,0FFH,0F8H,002H,000H,004H,000H
DB 002H,000H,004H,000H,002H,000H,004H,000H,000H,000H,000H,000H,000H,000H,000H,000H
db 512 dup(0)
data ends
code segment
start:mov ax,data
      mov ds,ax
      mov si,0
      mov di,64  ;空内存段的首地址

      mov cx,64   ;data段总共32个字节
   s: mov al,ds:[si]
      call change
      inc si
      loop s
       mov di,64   ;转化后的数据填充到内存段的首地址
      call show
    
     mov ax,4c00h
     int 21h
;名称:change
;功能:利用移位的原理(利用标志寄存CF位)将每个字节的八位提取出来,放到ds:[di]
;参数:ds:[si]=字符串首地址,ds:[di]=转化后数据存放的地址
change:  push cx
        
         mov cx,8
   chgs: shl al,1
         pushf
  pop bx
  and bx,00000001b
  mov ds:[di],bl
  inc di
  loop chgs
          pop cx
  ret

;名称:show
;功能:按字节显示字符,当为0时显示*,当为1时显示笑脸
;参数:ds:[di]指向字符串首地址
   show:push ax
        push cx
 push si
        mov ax,0b800h
        mov es,ax
 mov bx,5*160
 mov si,2*10
 mov cx,16     ;总共16行
shows0: push cx
 mov cx,32    ;总共32列
 shows1:mov al,ds:[di]
 cmp al,1
 jne next
 mov byte ptr es:[bx+si],03h;为1则将此处变为红心
 mov byte ptr es:[bx+si+1],04h
 inc di
        add si,2
       loop shows1
       add bx,160
       mov si,2*10
       pop cx
       loop shows0

   next:mov byte ptr es:[bx+si],0 ;为0则将此处变为0
        inc di
 add si,2
 loop shows1
 add bx,160
 mov si,2*10
 pop cx
 loop shows0
     pop si
     pop cx
     pop ax
     ret

code ends
end start

原创粉丝点击