汇编语言排序和RET返回问题

问题描述

汇编语言排序和RET返回问题

ORG 0000h
LJMP MAIN
ORG 0003h
MAIN:
MOV 30H,#02h
MOV 31H,#08h
MOV 32H,#06H
N EQU 03h
MOV r0,#30H
sort:
MOV A,r0
MOV r1,A
MOV r5,#N
CLR F0
DEC r5
MOV A,@r1
LOOP:
MOV r3,A
INC r1
MOV A,r1
CLR C
MOV A,@r1
SUBB A,r3
JNC LOOP1
SETB F0
MOV A,r3
XCH A,@r1
DEC r1
XCH A,@r1
INC r1
LOOP1:
MOV A,@r1
DJNZ r5,LOOP
JB F0,sort
RET
END
假设按递增顺序先排30H,31H,32H中的三个数,排完之后不是应该结束程序吗?为什么又返回sort了?
而且还有一个疑问:遇见RET是是返回子函数呢?还是返回主函数?为什么每次遇见RET都先返回子函数的第一条指令,再执行就回主函数,就是出不了程序了?

解决方案

不是加了个标号就是子程序了,必须是 PROC ... ENDP 才是子程序。
RET 必须对应 CALL。
你这段代码的结构莫名其妙,建议先看看《汇编语言》。

解决方案二:

http://blog.csdn.net/a123443/article/details/6779137

解决方案三:

http://www.cnblogs.com/Binhua-Liu/archive/2010/09/28/1837459.html
这是封装成函数的32bit汇编

解决方案四:

ret是用预先存在栈里的数值经行跳转,只要子程序里是堆栈平衡的就跳的回去。(看你的程序都没有push和pop,应该没这个问题)
ret需要的栈里的跳转地址是由call的时候存进去的(当然,你自己手动入栈也行),所以必须call过去的才能ret回来。

时间: 2024-09-28 17:09:27

汇编语言排序和RET返回问题的相关文章

call指令和ret指令(1001)

本文为<汇编语言程序设计>1001小节例程.点击链接-进课程主页. 用ret返回 assume cs:codesg, ss:stack stack segment db 16 dup (0) stack ends codesg segment mov ax,4c00h int 21h start: mov ax,stack mov ss,ax mov sp,16 mov ax,0 push ax mov bx,0 ret codesg ends end start 用retf返回 assume

封装的变化之排序算法中的封装

封装|排序|算法 设想这样一个需求,我们需要为自己的框架提供一个负责排序的组件.目前需要实现的是冒泡排序算法和快速排序算法,根据"面向接口编程"的思想,我们可以为这些排序算法提供一个统一的接口ISort,在这个接口中有一个方法Sort(),它能接受一个object数组参数.对数组进行排序后,返回该数组.接口的定义如下: public interface ISort{ void Sort(ref object[] beSorted);} 其类图如下: 然而一般对于排序而言,排列是有顺序之

在Python中使用sort()方法进行排序的简单教程

  这篇文章主要介绍了在Python中使用sort()方法进行排序的简单教程,是Python学习中的基础知识,需要的朋友可以参考下 sort()方法排序列表中的对象,比较使用func(如果给定). 语法 以下是sort()方法的语法: ? 1 list.sort([func]) 参数 func -- 这是一个可选参数,如果有将使用该函数,对列表中的对象进行排序 返回值 此方法不返回任何值,但是从列表中给定的对象进行排序 例子 下面的例子显示了sort()方法的使用 ? 1 2 3 4 5 6 #

JavaScript实现表格排序方法_javascript技巧

参考代码: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equ

从零开始学_JavaScript_系列(十一)——dojo(4)(GRID表格进阶:格式化、style、数据获取、多重排序、点击事件)

如果没有阅读过gridx表格的基本运用教程,建议先阅读这篇(4天点击量已经接近5k): http://blog.csdn.net/qq20004604/article/details/51170919 里面很详细的说明了gridx表格的创建,常用模块,和基本使用. 如果没有接触过dojo,建议阅读: http://blog.csdn.net/qq20004604/article/details/51028702 里面介绍了如何加载dojo. 关于dojo的下载,请查看: https://dojo

[华为机试练习题]12.整型字符串排序

题目 给定字符串内有很多正整数,要求对这些正整数进行排序,然后返回排序后指定位置的正整数 排序要求:按照每个正整数的后三位数字组成的整数进行从小到大排序 1)如果不足三位,则按照实际位数组成的整数进行比较 2)如果相等,则按照输入字符串中的原始顺序排序 说明(以下内容考生无须检查,调用者保证): 1) 字符串以'\0'结尾,仅包含数字.空格 2) 字符串内正整数之间以单个空格分隔,字符串首尾没有空格 3) 正整数格式为十进制,大小:1~1000000,正整数的数字非零开始 示例: 如字符串内容

《Redis入门指南》一4.3 排序

4.3 排序 Redis入门指南 午后,宋老师正在批改学生们提交的程序,再过几天就会迎来第一次计算机全市联考.他在每个学生的程序代码末尾都用注释详细地做了批注--严谨的治学态度让他备受学生们的爱戴. 一个电话打来."小白的?"宋老师拿出手机,"博客最近怎么样了?"未及小白开口,他就抢先问道. 特别好!现在平均每天都有50多人访问我的博客.不过昨天我收到一个访客的邮件,他向我反映了一个问题:查看一个标签下的文章列表时文章不是按照时间顺序排列的,找起来很麻烦.我看了一下

phalapi-入门篇3(请求和返回)

phalapi-入门篇3(请求和返回) 前言 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 这一小节主要讲一下请求(参数验证),返回(怎么返回自己想要的结果),官方文档也有比较详细的说明所以在有些比较基础的地方就一笔带过,讲一点比较实用在项目开发中怎么使用phalapi框架定制出自己想要的请求和返回结果. 请先通读: [1.12] 参数规则:接口参数规则配置 [1.13] 统一的接口请求方式:?sevice=XXX.XXX [1.14] 统一的返回格

php arsort 数组降序排序详细介绍_php实例

arsort 对数组进行降序排序并保持索引关系. 基本语法 bool arsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) 本函数对数组进行降序排序,数组的索引保持和单元的关联. arsort函数主要用于对那些单元顺序很重要的结合数组进行排序. 参数介绍: 参数 描述 array 必需.输入的数组. sort_flags 可选.规定如何排列数组的元素/项目.可能的值: 0 = SORT_REGULAR - 默认.把每一项按常规顺