• Call指令和Ret指令讲解04 零基础入门学习汇编语言51


    第十章:Call指令和Ret指令讲解04

     

    让编程改变世界

    Change the world by program


     

    批量数据的传递

      前面的例程中,子程序cube只有一个参数,放在bx中。如果有两个参数,那么可以用两个寄存器来放,可是如果需要传递的数据有3个、4个或更多直至N个,我们怎样存放呢? 寄存器的数量终究有限,我们不可能简单地用寄存器来存放多个需要传递的数据。对于返回值,也有同样的问题。 在这种时候,我们将批量数据放到内存中,然后将它们所在内存空间的首地址放在寄存器中,传递给需要的子程序。 对于具有批量数据的返回结果,也可用同样的方法。 接下来我们来看下具体的落实……  

    编程:将data段中的字符串转化为大写。

    [codesyntax lang="asm"]
    assume cs:code
    
    data segment
        db 'conversation'
    data ends
    
    code segment 
    start:
        ……
    code ends
    
    end start
    [/codesyntax]  

    我们看一个例子,设计子程序

    功能:将一个全是字母的字符串转化为大写。 子程序 [caption id="attachment_377" align="aligncenter" width="300"] 将一个全是字母的字符串转化为大写[/caption]   源程序代码 [codesyntax lang="asm"]
    assume cs:code
    
    data segment
        db 'conversation'
    data ends
    
    code segment
    start:	
        mov ax,data
        mov ds,ax
        mov si,0		;ds:si指向字符串(批量数据)所在空间的首地址
    
        mov cx,12		;cx存放字符串的长度
    	call capital
    
        mov ax,4c00h
        int 21h
    
    capital:
        and byte ptr [si],11011111b
    	inc si
    	loop capital
    
        ret
    code ends
    
    end start
    [/codesyntax] 注意:除了寄存器、内存传递参数外,还有一种通用的方法使用栈来传递参数。关于这种技巧请参看附注4。  

    寄存器冲突的问题

     

    设计一个子程序:

    功能:将一个全是字母,以0结尾的字符串,转化为大写。 程序要处理的字符串以0作为结尾符,这个字符串可以如下定义:db ‘conversation’,0  

    分析分析~

    应用这个子程序 ,字符串的内容后面定要有一个0,标记字符串的结束。子程序可以依次读取每个字符进行检测,如果不是0,就进行大写的转化,如果是0,就结束处理。 由于可通过检测0而知道是否己经处理完整个字符串 ,所以子程序可以不需要字符串的长度作为参数。我们可以直接用jcxz来检测0。  

    子程序实现代码:

    [caption id="attachment_378" align="aligncenter" width="300"] 将一个全是字母,以0结尾的字符串,转化为大写[/caption]  

    子程序的应用

    将data段中字符串全部转化为大写 [codesyntax lang="asm"]
    assume cs:code
    
    data segment
        db ‘word',0
        db ‘unix',0
        db ‘wind',0
        db ‘good',0
    data ends
    [/codesyntax]   完整的程序代码源代码下载)  

    问题10.2

      前面的程序在思想上完全正确,但在细节上却有些错误,把错误找出来。 提示:问题在于cx的使用  

    实验十 编写子程序

     

    1. 显示字符串

    2. 解决除法溢出问题

    3. 数值显示

      连续三道题都有点难度,大家慎重斟酌! 记住,没有过不去的坎!!坚持下来就是成功!! [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LUCRGIHFRQNB']视频下载[/Downlink]
  • 相关阅读:
    hibernate update部分更新
    strtus2.0实现下载
    cookie和session机制之间的区别与联系
    生成随机数字验证码
    ssh生成随机数字验证码
    ASP一句话轻松获取域上的用户名
    SQL server 日志文件清除
    Entity Framework中使用DbMigrator更新数据库至最新结构
    进程间通信
    asp备份SQL数据库
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3846038.html
Copyright © 2020-2023  润新知