希望大家帮我改改
时间:2011-03-19
来源:互联网
原题是这样的
数组ARRAY是一个8个元素的有符号字数组,求该数组所有元素之和。可能超过16位,将其放入SUM,SUM+2中。
Assembly code
数组ARRAY是一个8个元素的有符号字数组,求该数组所有元素之和。可能超过16位,将其放入SUM,SUM+2中。
Assembly code
DATA SEGMENT ARRAY DW -111,222,-333,444,-555,666,777,888 SUM DW ? STRING DB "The original array is: -111,222,-333,444,-555,666,777,888$" RESULT DB "Sum is $" DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,STRING MOV AH,09H INT 21H LEA SI,ARRAY MOV CX,8 MOV SUM,0 ONE: ADD SUM,SI ADD SI,2 LOOP ONE LEA DX,RESULT MOV AX,09H INT 21H MOV DX,SUM MOV AX,02H INT 21H MOV AH,4CH INT 21H CODE ENDS END START
作者: hongjimmy91 发布时间: 2011-03-19
用add,adc指令
作者: Lactoferrin 发布时间: 2011-03-19
Assembly code
DATA SEGMENT ARRAY DW -111,222,-333,444,-555,666,777,888 SUM DW 0,0 ;和可能超过16位, 所以SUM需要2个字单元 STRING DB "The original array is: -111,222,-333,444,-555,666,777,888$" RESULT DB "Sum is $" DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,STRING MOV AH,09H INT 21H LEA SI,ARRAY MOV CX,8 ;MOV SUM,0 ;在定义时直接赋初值即可 ONE: ;ADD SUM,[SI] ;这里加的是si指向的那个单元的内容,而非si MOV AX,[SI] ;因为原来的数是有符号的,所以把它放ax CWD ;然后带符号扩展到dx和ax组成的32位单元 ADD SUM,AX ;低16位加到SUM ADC SUM+2,DX ;高16位连同低16位的进位加到SUM+2中 ADD SI,2 LOOP ONE LEA DX,RESULT MOV AH,09H ;这里是ah不是ax INT 21H ; MOV DX,SUM ;这3条指令是显示ASCII字符的, 你的结果是当数字看到, 不能当字符输出 ; MOV AX,02H ; INT 21H test sum+2,8000H ;判断结果的符号(最高位为1是负数,为0是正数) jz positive ;正数则直接处理 mov ah,2 ;若是负数,就先输出负号 mov dl,'-' int 21h mov ax,sum ;将结果的低半部分送ax mov dx,sum+2 ;高半部分送dx not ax not dx add ax,1 adc dx,0 ;32位数取反加1(就是变成它的相反数---绝对值) jmp trans ;然后转输出 positive: mov ax,sum ;将结果的低半部分送ax mov dx,sum+2 ;高半部分送dx. 这个地方的分支结构应该可以优化 trans: ;把数字转成字符串然后输出 mov cx,0 ;计数器记录转成十进制的数字位数 mov bx,10 ;除以10的除数,用于转十进制 div10: div bx push dx ;余数存入栈中 inc cx ;计数 mov dx,0 ;被除数高位置0(这要加上和在高位上的数不超过9,否则算法更复杂) cmp ax,0 ;判断商是否为0 jne div10 ;不为0继续除以10取余数 mov ah,2 disp: pop dx ;取出依次保存的余数,即对应的十进制每位数 add dl,30h ;数字转成字符输出 int 21h loop disp MOV AH,4CH INT 21H CODE ENDS END START
作者: shzhfu 发布时间: 2011-03-19
调试结果:
Assembly code
Assembly code
The original array is: -111,222,-333,444,-555,666,777,888Sum is 1998 The original array is: -111,222,-333,444,-555,666,-777,-888Sum is -1332
作者: shzhfu 发布时间: 2011-03-19
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28