鱼C论坛

 找回密码
 立即注册
查看: 2190|回复: 0

[汇编作业] 实验十 3.数值显示

[复制链接]
发表于 2018-7-10 16:08:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
分析:
其实就是16进制转为10进制,然后在打印。
按下键盘接收一个字符,进行编码,然后存储在内存。(字符编码后存储,用什么编码方法?ascii),用调速器debug查看都是二进制转为16进制的显示结果,要打印成10进制需要咱们自己转换

123d 十进制对应16进制 7BH
7bH   / 10d = 商ch 余 3
ch     / 10d =  商1  余 2
1      / 10d =  商0   余 1
结果就是321,倒序过来就是123,
assume cs:code,ds:data,ss:stack

stack segment
        db 64 dup (0)
stack ends

data segment
        dw 123,1222,0,88,388,36,3434
data ends

data1 segment
        db 10 dup (0)                                ;转换后保存的的结果
data1 ends

code segment
start:
        mov ax,stack
        mov ss,ax
        mov sp,64
        
        push bp
        mov bp,sp
        
        sub sp,6                                        ;第一个函数参数 function(data1,index,data)
        mov ax,data                                        ;ds,index,es
        mov [bp-2],ax
        mov word ptr[bp-4],0
        mov ax,data1
        mov [bp-6],ax
        
        
        sub sp,6                                        ;第二个函数参数        function(cx,行列,0b800h)
        mov dh,10                                        ;行
        mov dl,10                                        ;列
        mov cl,01000010b                        ;颜色
        mov [bp-6-2],0b800h                        ;es 0b800h
        mov [bp-6-4],dx                                ;行列
        mov [bp-6-6],cx                                ;颜色
        mov cx,8
lo:
        push cx
        call calc                                        ;转换字符,保存到data1
        pop cx
        add word ptr[bp-4],2                ;偏移下一个字
        
        push cx
        call show_string                        ;打印字符串
        pop cx
        mov ah,[bp-9]                                ;打印字符串,下一行
        add ah,1
        mov [bp-9],ah

        loop lo
        
        add sp,12                                        ;还原sp
        pop bp
        mov ax,4c00h
        int 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;程序结束
calc:                                                        ;转换字符
        push bp
        mov bp,sp
        mov ax,[bp+6+6]                                ;读取参数
        mov es,ax
        mov ax,[bp+8+6]                                ;读取参数
        mov si,ax
        mov ax,[bp+0ah+6]                        ;读取参数
        mov ds,ax
        
        push di                                                ;局部变量中需要用到的变量
        sub di,di
        sub dx,dx                                        
        mov ax,ds:[si]
        mov bx,10
lo1:
        div bx
        add dl,30H
        
        push dx
        ;mov byte ptr es:[di],dl        ;保存结果
        inc di                                                ;次数累计器
        mov cx,ax
        sub dx,dx
        jcxz over_2
        jmp lo1
over_2:
        mov cx,di
        sub di,di
lo2:
        pop dx                                                ;处理倒序字符
        mov byte ptr es:[di],dl                ;保存结果
        inc di
        loop lo2
        
        mov byte ptr es:[di],0
        pop di
        pop bp
        ret
        
show_string:
        push bp                                                ;备份环境
        mov bp,sp
        
        mov dx,[bp+6]                                ;颜色
        mov ax,[bp+8]                                ;行号        行号需要计算所以保存在ax
        mov bx,[bp+10]
        mov es,bx                                        ;显示段地址
        mov bx,[bp+12]
        mov ds,bx                                        ;打印的字符串首地址
        
        sub bx,bx
        mov bl,al                                        ;偏移在多少列?
        add bl,bl                                        ;一个160个字节 1个字符需要占用2个字节
        mov di,bx
        
        mov al,ah                                        ;偏移在多少行?
        mov bx,160
        mul bl
        add di,ax

        mov ax,dx                                        ;备份颜色
        sub cx,cx
        sub si,si
show_string1:
        mov bl,ds:[si]                                ;读取值
        mov es:[di],bl                                ;字符
        mov byte ptr es:[di].1,al        ;颜色
        
        mov cl,bl
        add di,2
        inc si
        jcxz show_string_over
        jmp show_string1
show_string_over:
        pop bp                                                ;恢复在函数使用的环境
        ret                                                 ;返回函数,4表示在调用函数时传入的参数sp+4
code ends
end start
n2.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 09:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表