一道基本的汇编语言题目
来源:互联网 发布:java天气预报源代码 编辑:程序博客网 时间:2024/05/17 06:36
题目描述:有一个首地址为mem的100个字的数组,试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零。
这是一道汇编语言关于程序分支结构设计的题目,其实很简单。如果用C语言写很快就可以完成,但由于是初学汇编,所以还是遇到了很多的麻烦。
开始我的算法思想是这样的:用两个指针si、di指着第一个元素,一起向后移动,遇到0的时候跳到移动模块,将si所指向的后面元素全部往前移动。di保存着当前的位置。
开始时是将末位人为置为0,那么向前移动是就可以将后面的元素覆盖为0,但是出现了死循环。经过debug一步一步看看,发现了问题。就是到后面元素全部为0的时候di不能往后移动到结束,一直处于把0往前移动。
想的时候竟然没有考虑到这个问题真是不该,还浪费了很多时间调试。后来不采用末位置0的方法。而是使用result变量记录非0元素个数。完成0元素删除后再根据 result后面的元素置为0。
代码如下:
DATAS SEGMENT data dw 1,0,1,2,0,0,1,9,2,3 ;十个作为测试 ;dw 0,9,8,7,6,5,4,3,2,1 ;dw 0,9,8,7,6,5,4,3,2,1 ; dw 0,9,8,7,6,5,4,3,2,1 ;dw 0,9,8,7,6,5,4,3,2,1 ; dw 0,9,8,7,6,5,4,3,2,1 ;dw 0,9,8,7,6,5,4,3,2,1 ; dw 0,9,2,7,6,5,4,3,2,1 ;dw 0,9,8,7,6,5,4,2,2,1; dw 0,9,8,7,6,5,4,3,2,1 result dw 0 ;此处输入数据段代码 DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX mov si,0 mov cx,10 s: cmp cx,0 jz s3 dec cx cmp data[si],0 jz s2 add si,2 jmp s s2: inc result add si,2 jmp s s3: mov ax,10 sub ax,result mov result,ax mov di,0 sub di,2 s0: add di,2 cmp di,20 ja quit mov si,di cmp data[si],0 jz move jmp s0 move: cmp si,20 jb move1 sub di,2 jmp s0 move1: mov ax,data[si+2] mov data[si],ax add si,2 jmp move quit: mov ax,result mov bx,02 mul bx mov si,ax L: cmp si,22 jb add0 jmp next add0: mov data[si],0 inc si jmp L next: mov si,0 sub si,2 output: add si,2 cmp si,20 jb s1 jmp over s1: mov ax,data[si] add ax,30h mov dx,ax mov ah,02h int 21h mov dl,' ' mov ah,02h int 21h jmp output over: MOV AH,4CH INT 21HCODES ENDS END START
代码看起来很乱,很多跳转,但是可以看到思路还是清晰的。
在后面学习笔记(7)中做了改进。
- 一道基本的汇编语言题目
- 学习笔记(7)--对“一道基本的汇编语言题目”的改进
- 一道有趣的题目
- 一道用递规做的题目
- 经典的一道题目.
- 笔试的一道题目
- 一道题目的解答
- 一道小学的题目
- 一道猥琐的题目
- 爱因斯坦的一道题目
- 一道有趣的题目
- 一道简单的题目
- 一道有意思的题目
- 一道有趣的题目
- 一道题目想到的
- 一道约瑟夫的题目
- 一道简单的题目
- 一道stack的题目
- 比较前N个字符串大小 strncmp
- C#语言中提供了枚举和整型之间的强制转换功能
- ACM最小表示法 最大表示法 模板 及其使用环境 判断字符串循环重构
- 让TdirectoryListBox显示系统隐藏文件夹和文件
- PHP、Python 相关正则函数一点实例
- 一道基本的汇编语言题目
- 给大学生学习ARM和FPGA的建议(周立功)
- Windows CE下的串口通讯实例
- LinkedStack
- 图文并茂:一步一步跟我搭建Windows CE 6.0 R3开发环境
- PHP 实现301转向代码
- wget 批量下载并且按序号重命名 windows版
- jquery.validate.js 2
- Web开发者必备:21个超实用PHP代码