王爽汇编第三版实验10
Posted 木剑配酒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了王爽汇编第三版实验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
以上是关于王爽汇编第三版实验10的主要内容,如果未能解决你的问题,请参考以下文章