Assembly capitalization converted and displayed on the screen

assume cs:codeseg,ss:stacksg,ds:datasg
stacksg segment
    dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
    db 'ibm             '
    db 'dec             '
    db 'dos             '
    db 'vax             '
datasg ends
codesg segment
    start:
          mov ax,stacksg   ;初始化栈
          mov ss,ax
          mov sp,16
          mov ax,datasg    ;初始化数据
          mov ds,ax   
          mov ax, 0b800h  ;初始屏幕基址,显示在屏幕的基地址
          mov es, ax 
          mov di,0
          mov bx,0         ;行的开始
          mov cx,4
    s0:
          push cx         ;压栈保存CX
          mov si,0          ;列的开始,每次进入下一行前是初始化为零  
          mov cx,3        ;x循环改变3列的数据
    s1:   mov al,[bx+si]  ;定位具体的那一行那一列
          and al,11011111B;转换大写
          mov [bx+si],al  ;把转换好的大写数据放回去该内存空间
          mov es:[di],al  ;显示在屏幕数据
          mov es:[di+1],0002h;颜色 
          inc si 
          add di,2
          loop s1 
          
          pop cx          ;出栈还原CX   
          cmp cx,1        ;最后一个逗号就不要加上去了
          je s2           ;判断直接跳转
          mov es:[di],' ,' ;加个空格区分显示 
          mov es:[di+1],0002h  
          add di,2
          add bx,16       ;下一行
          s2:
          loop s0     
codesg ends                                                                      

end start


Published 21 original articles · 21 praises · 40,000+ views

Guess you like

Origin blog.csdn.net/kuyz1/article/details/79926444