• 王爽 汇编 实验10.3


    一、实验要求

     

     二、代码实现

      1 assume cs:code,ds:data
      2 
      3 data segment
      4     db 10 dup(0)
      5 data ends
      6 
      7 code segment
      8 start:      mov ax,12666
      9 
     10             mov bx,data
     11             mov ds,bx
     12             mov si,0
     13             
     14             call dtoc
     15 
     16             mov dh,8            ;定义行(0-24)
     17             mov dl,3            ;定义列(0-79)
     18             mov cl,2            ;定义颜色            
     19             call show_str        ;调用子程序,打印字符
     20 
     21             mov ax,4c00h
     22             int 21h
     23            
     24 dtoc:       push dx
     25             push cx
     26             push ax
     27             push si
     28             push bx
     29             
     30             mov bx,0        ;bx在子程序中用来存放位数,用栈来临时存放修改后的字符
     31             
     32 s1:         mov cx,10d        ;d表示10进制,cx准备被除
     33             mov dx,0
     34             
     35             div cx            ;除以10
     36             mov cx,ax        ;得到商赋给cx
     37             jcxz s2
     38             
     39             add dx,30h        ;将余数加上30h得到相应的ascii码
     40             push dx
     41             
     42             inc bx
     43             jmp short s1
     44             
     45 s2:         add dx,30h        ;当商为0时,余数为个位
     46             push dx            
     47             inc bx            ;再一次进行栈操作(商为0而余数不为0的情况)
     48             
     49             mov cx,bx        ;总共有bx位进栈了,所以要循环此数位bx
     50             mov si,0
     51             
     52 s3:         pop ax            ;依次出栈将数据存放到指定的数据段中(内存中)
     53             
     54             mov [si],al
     55             inc si
     56             
     57             loop s3
     58                         
     59 okay:       pop bx
     60             pop si
     61             pop ax
     62             pop cx
     63             pop dx
     64             
     65             ret
     66         
     67 show_str:   push cx
     68             push si
     69 
     70             mov al,0A0h            ;每一行160个字节        
     71             dec dh                ;行号从0开始,需要减去1
     72             mul dh                ;求出行的偏移量(结果存放到了ax中)
     73             mov bx,ax            ;将行偏移量暂存到寄存器bx中
     74             
     75             mov al,2              ;一行2个字符
     76             dec dl                ;列号从0开始,需要减去1
     77             mul dl                ;求出列偏移量(结果存放到了ax中)
     78                     
     79             add bx,ax            ;行和列的偏移量加在一起,就是该字符串首地址在显存中的偏移地址
     80             
     81             
     82             mov ax,0b800h        ;显存段地址
     83             mov es,ax            ;现存段地址保存到es寄存器中
     84             
     85             
     86             mov di,0            ;显存中传递列值
     87             mov ch,0
     88             mov al,cl            ;颜色数据保存到ax寄存器低位中
     89             
     90 s:          mov cl,ds:[si]        ;传递数据
     91             jcxz ok                ;至到原始数据偏移到数据0的时候,表明所有原始数据已处理完成
     92                                   ;然后跳转到标号ok
     93             
     94             mov es:[bx+di],cl    ;传递数据
     95             mov es:[bx+di+1],al    ;传递颜色
     96             
     97             inc si                ;每处理一个字节,偏移地址自增1
     98             add di,2            ;每处理二个字节(包含一个数据和一个颜色属性),偏移地址自增2
     99             jmp short s
    100 
    101 ok:         pop si
    102             pop cx            
    103             ret
    104 code ends
    105 end start

     三、上机调试

    待续

    先上传一张结果图片

  • 相关阅读:
    Oracle11gR2导入导出实战之物化视图prebuilt
    Oracle11gr2_ADG管理之switchover补充
    Oracle11gR2--手工建库&dbca建库
    Oracle11gr2_ADG管理之在备库上模拟failover的过程实战
    自己写个验证码类
    隐藏字符 BOM
    jquery与自己写的js文件冲突解决办法
    javaBean
    序列化
    UML
  • 原文地址:https://www.cnblogs.com/TonyJia/p/12605974.html
Copyright © 2020-2023  润新知