zoukankan      html  css  js  c++  java
  • 王爽 汇编 实验10

    1. 显示字符串

      第一次写出来的代码发现只能用作特定问题,如果其他程序调用子程序将会出错.后面的题目也就无法完成.所以重新写了一遍,进入后子程序中使用的寄存器全部入栈

     1 assume cs:code
     2 
     3 data segment
     4     db 'Welcometomasm!',0
     5 data ends
     6 
     7 stack segment
     8     db 16 dup (0)
     9 stack ends
    10 
    11 code segment
    12     start:
    13         mov dh,8
    14         mov dl,3    ;第八行第三列
    15         
    16         mov cl,2    ;颜色
    17             
    18         mov ax,data
    19         mov ds,ax    ;ds指向数据段
    20         
    21         mov si,0
    22         call show_str
    23 
    24     all:
    25         jmp short all    ;一直循环
    26         
    27         mov ax,4c00h
    28         int 21h
    29     
    30     show_str:
    31         push dx
    32         push ax
    33         push cx        ;子程序开始前入栈
    34         push si
    35         
    36         mov ax,0b800h
    37         mov es,ax    ;es指向现存的起始地址
    38         
    39         mov al,160    ;一行可现实80个字符,每个字符2字节.160字节
    40         dec dh        ;行-1
    41         mul dh        ;乘,结果在ax中
    42         mov bx,ax    
    43         ;(n行-1)*160=n行开头的偏移地址
    44         
    45         mov al,2    ;一个字符占2列
    46         dec dl        ;列-1
    47         mul dl        
    48         mov di,ax    ;列的偏移地址
    49         ;(n列-1)*2=当前列的偏移地址
    50         
    51         ;颜色设置
    52         mov ch,0
    53         mov dx,cx
    54     s:
    55         mov cl,[si]    ;ds:[si]指向字符串的首地址
    56         mov ch,0
    57         jcxz ok
    58         mov ax,[si]
    59         mov es:[bx+di],ax
    60         mov es:[bx+di+1],dx
    61         ;一个字母占两个字节,一个ascii
    62         add di,2
    63         inc si
    64         jmp short s
    65         
    66     ok:    
    67         pop si
    68         pop cx
    69         pop ax
    70         pop dx
    71         ret
    72         
    73 code ends
    74 end start

      图片显示:

     3. 数值显示

      

      1 assume cs:code
      2 data segment
      3     dw 16 dup (0)
      4 data ends
      5 
      6 code segment
      7 start:
      8     mov bx,data    ;指向数据段
      9     mov ds,bx
     10 
     11     mov si,0
     12     mov ax,12345
     13     call dtoc
     14     
     15     mov dh,3
     16     mov dl,3
     17     mov cl,2
     18     call show_str
     19 
     20     ;一直循环
     21 all:
     22     jmp short all
     23     
     24     mov ax,4c00h
     25     int 21h
     26     
     27 dtoc:
     28     push ax
     29     push cx
     30     push bx
     31     push si
     32     push di        ;备份
     33     
     34     mov bx,10
     35     mov di,0    ;记录循环的次数
     36 
     37     ;循环s用来
     38     sd:    
     39         mov dx,0
     40         div bx
     41         add dx,30h
     42     
     43         push dx    ;用栈存储然后出栈调整顺序
     44         inc di    
     45         mov cx,ax    ;ax为商,商为0结束
     46     
     47         jcxz okd
     48     
     49     jmp short sd
     50     okd:
     51     
     52         mov cx,di
     53     sd1:
     54         pop ax
     55         mov [si],al    ;将值传入 ds:[si]
     56         inc si    
     57     loop sd1
     58     
     59         pop di
     60         pop si
     61         pop bx
     62         pop cx
     63         pop ax
     64         ret
     65     
     66     ; 字符展示子程序
     67     show_str:
     68         push ax
     69         push bx
     70         push cx        ;子程序开始前入栈
     71         push di
     72         push si
     73         
     74         mov ax,0b800h
     75         mov es,ax    ;es指向显存的起始地址
     76         
     77         mov al,160    ;一行可现实80个字符,每个字符2字节.160字节
     78         dec dh        ;行-1
     79         mul dh        ;乘,结果在ax中
     80         mov bx,ax    
     81         ;(n行-1)*160=n行开头的偏移地址
     82         
     83         mov al,2    ;一个字符占2列
     84         dec dl        ;列-1
     85         mul dl        
     86         mov di,ax    ;列的偏移地址
     87         ;(n列-1)*2=当前列的偏移地址
     88         
     89         ;颜色设置
     90         mov ch,0
     91         mov dx,cx
     92     s_show:
     93         mov cl,[si]    ;ds:[si]指向字符串的首地址
     94         mov ch,0
     95         
     96         jcxz ok_show
     97         
     98         mov ax,[si]
     99         mov es:[bx+di],ax
    100         mov es:[bx+di+1],dx    ;颜色设置
    101         ;一个字母占两个字节,一个ascii
    102         add di,2
    103         inc si
    104         jmp short s_show
    105         
    106     ok_show:    
    107         pop si
    108         pop di
    109         pop cx
    110         pop bx
    111         pop ax    ;出栈
    112         ret
    113     
    114 code ends
    115 end start
  • 相关阅读:
    FileSystemWatcher用法详解【转】
    关于TransactionScope事务的TransactionScopeOption的实例
    TransactionScope IsolationLevel 事务隔离级别
    C#中TransactionScope的使用方法和原理
    关于Qt 静态成员函数调用信号
    【Qt编程】基于QWT的曲线绘制及图例显示操作——有样点的实现功能
    使用qwt作曲线图——有网格线背景的画法
    Qt程序app添加图标复制到其它电脑后不显示的解决方法
    QUrl的使用,特别是对含特殊字符的字符串进行 URL 格式化编码
    QDateTime 本地时间和UTC时间转换问题
  • 原文地址:https://www.cnblogs.com/Triomphe/p/8545461.html
Copyright © 2011-2022 走看看