首页
社区
课程
招聘
[求助]这个程序是啥意思
发表于: 2013-4-28 18:15 4402

[求助]这个程序是啥意思

2013-4-28 18:15
4402
assume cs:code
code segment
start:  mov ah,0
           int 16h
           mov ah,1
           cmp al,'r'
           je red
           cmp al,'g'
           je green
           cmp al,'b'
           je blue
           jmp short sret
red:    shl ah,1
green:shl ah,1  
blue:   mov bx,0b800h
           mov es,bx
           mov bx,1
           mov cx,2000
s:        and byte ptr es:[bx],11111000B
           or es:[bx],ah
           add bx,2
           loop s
sret:   mov ax,4c00h
          int 21h
code ends
end start
  
谁能分析一下这个每一条指令是什么意思?  我看不懂 然后能做个总结最好

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 601
活跃值: (256)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
2
assume cs:code ;cs寄存器指向代码段      
code segment                ;代码段开始
start:  mov ah,0        ;ax寄存器高8位置0,把键盘按下的字符和扫描码读到缓冲区
           int 16h ;读取键盘
           mov ah,1    ;ax寄存器高8位置1,从键盘缓冲区中取字符,返回值AH是字符,AL是扫描码
           cmp al,'r'        ;按下了r键?
           je red        ;
           cmp al,'g'                ;按下了g键?
           je green
           cmp al,'b'                        ;按下了b键?
           je blue
           jmp short sret
red:    shl ah,1                ;0111 0010(r键)左移1位 = 1110 0100 = 0xE4
green:shl ah,1                  ;0110 0111(g键) 左移1 = 1100 1110 = 0xCE
blue:   mov bx,0b800h   ;内存地址0b800h赋值给bx
           mov es,bx                ;es段指向0b800h
           mov bx,1                ;bx初始1
           mov cx,2000                ;循环次数2000
s:        and byte ptr es:[bx],11111000B        ;把[0B800 + bx] 和 11111000B(2进制)与运算
           or es:[bx],ah                ;把[0B800 + bx] 和 ah(0xE4/0xCE)或运算
           add bx,2                ;bx = bx+2,中间隔1个字节没有被运算
           loop s        ;循环
sret:   mov ax,4c00h        ;
          int 21h                ;等待用户输入,字符存在4c00h地址下
code ends        ;代码单结束
end start        ;程序结束
2013-4-28 18:55
0
雪    币: 50161
活跃值: (20610)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
很有耐心,奖励5kx鼓励一下。
2013-4-30 22:42
0
游客
登录 | 注册 方可回帖
返回
//