• 将内存中的数字转换成字符串并保存于内存中,随后将转换好的字符串输出到屏幕上(汇编)


    ;object: change number to string and put teh string to the screen
    ;writer: mike
    ;time: 2020.11.02
    
    
    assume cs:code,ds:data,ss:stack
    
    
    data segment
            dw 1234
    
    data ends
    
    data1 segment
            db '0000000000',0
    data1 ends
    
    stack segment stack
            db 30 dup(0)
    
    
    stack ends
    
    code segment
            ;数据从哪里来        
    start:        mov ax,data
            mov ds,ax
            mov si,0
            ;数据到那里去    
            mov ax,data1
            mov es,ax
            mov di,10    ;从最后一位开始输入
            
            mov ax,ds:[si]   ;将内容放到寄存器,用于除法
            mov dx,0
    
            call shortDiv  ;调用函数
    
    
            mov bx,data1    ;将内存中的字符串显示在屏幕上
            mov ds,bx       ;数据从哪里来
            mov si,di       ;其实di是1
    
            mov bx,0B800H    ;数据到那里去,显示在屏幕上
            mov es,bx
            mov di,160*10
            add di,40*2
    
            call showString
            
            mov ax,4c00H
            int 21H
    
    ;===================================
    shortDiv:      mov cx,10
            div cx        ;结果放在ax中
            add dl,30H     ;将余数数字,变成数字字符串,这里用的是16位除法,这里cx是16位
            sub di,1       ;修改栈顶标记    
            mov es:[di],dl   ;将结果放进内存
                
            mov cx,ax          ;jcxz比较的是cx
            jcxz shortDivRet  ;比较商是不是得零
    
    
            mov dx,0          ;如果商不是零,也就是没有除到最后,重新将余数存储器归为0
            jmp shortDiv      ;重新循环程序,这里ax默认已经放上了除法之后的商。
    
    shortDivRet:      ret    
            
    ;=======================================    
    
    showString:    push cx
            push ds
            push si
            push es
            push di               ;将寄存器入栈
            
            mov cx,0               ;初始化cx    
            
    showString1:    mov cl,ds:[si]         ;检查是否到字符串的最后
            jcxz showStringRet     
            mov es:[di+0],cl         ;将内存中的字符串送到屏幕上
            mov byte ptr es:[di+1],00000010B   ;给字符串加上颜色
            add di,2             ;不明白为什么是加2? 
            inc si
            jmp showString1
    
    showStringRet:  pop di
            pop es
            pop si
            pop ds
            pop cx
    
            ret
    
    code ends
    end start
    end

  • 相关阅读:
    linux文件锁flock【转】
    无尽的悲伤
    go的临时对象池--sync.Pool
    golang 小知识-持续更新中
    【转】Go Channels
    Golang文件名命名规则
    Parquet存储格式
    预装的Office2016,文件图标表显示以及新建失败问题解决 方法
    Gamma编码及Delta编码概述
    java web开发环境配置系列(二)安装tomcat
  • 原文地址:https://www.cnblogs.com/zijidefengge/p/13923088.html
Copyright © 2020-2023  润新知