网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
09月11日漏签0天
汇编吧 关注:45,331贴子:164,065
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 7回复贴,共1页
<<返回汇编吧
>0< 加载中...

求助一道超级简单的题目 没学过但是实验设计用到了 求大神指导

  • 只看楼主
  • 收藏

  • 回复
  • 七年之痒丶kill
  • 基础知识
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
原题是:从BUF1 的20个无符号数中,取出其最大最小的2个数字,分别存放在BUF2中。
原代码是:START PROC FAR
; Store return address to OS:
PUSH DS
MOV AX, 0
PUSH AX
; set segment registers:
MOV AX, DSEG
MOV DS, AX
MOV ES, AX
LEA SI,BUF1
LEA DI,BUF2
MOV CX,20H
AGAIN:MOV AL,[SI]
INC SI
CMP AL,[DI]
JNC X1
JMP GO1
GO1:CMP AL,[DI+1]
JC X2
JMP GO2
GO2:DEC CX
JNZ AGAIN
JMP DONE
X1:MOV [DI],AL ;将较大值赋给[DI]
JMP GO1
X2:MOV [DI+1],AL ;将较小值赋给[DI+1]
JMP GO2
DONE:MOV AL,00H ;求平均数
ADD AL,[DI]
ADD AL,[DI+1]
MOV BL,02H
DIV BL
MOV [DI+2],AL
hlt
; return to operating system:
RET
START ENDP
;*******************************************
CSEG ENDS
END START ; set entry point.
现题目修改为:从BUF1 的20个无符号数中,取出其最小的2个数字,分别存放在BUF2中。
应当如何修改代码?


  • 七年之痒丶kill
  • 基础知识
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
用的编译器是8086microprocessor


2025-09-11 23:52:42
广告
不感兴趣
开通SVIP免广告
  • 七年之痒丶kill
  • 基础知识
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
@snfuksse


  • 临安春雨霁
  • 基础知识
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
同学你好


  • 做而论道
  • 基础知识
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
START PROC FAR
;Store return address to OS:
PUSH DS
MOV AX, 0
PUSH AX
;Set segment registers:
MOV AX, DSEG
MOV DS, AX
MOV ES, AX
LEA SI, BUF1
LEA DI, BUF2
MOV AL, [SI] ;取第一个数
MOV BX, 1
MOV CX, 20H - 1 ;和其它数字比较
AGAIN1:
CMP AL, [SI + BX];比较
JC X1 ;AL较小则转移
XCHG [SI + BX], AL ;交换
MOV [SI], AL ;将较小值存放到第一个位置
X1:
INC BX
LOOP AGAIN1
MOV AL, [SI + 1] ;取第二个数
MOV BX, 2
MOV CX, 20H - 2
AGAIN2:
CMP AL, [SI + BX]
JNC X2
XCHG [SI + BX], AL
MOV [SI], AL ;将较小值存到第二个位置
X2:
INC BX
LOOP AGAIN2
MOV SI, 0
MOV AX, BUF1[SI] ;取最小两个数
MOV BUF2[SI], AX ;存放到BUF2
hlt
;Return to operating system:
RET
START ENDP


  • fasmfan
  • 文件处理
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
  题目是有问题的,因为没有明确数组元素的宽度是多少。不过,从所给的程序看,权且看作是无符号字节数组。
  解题算法有多种,如一趟扫描完成筛选任务,或者两趟扫描完成筛选任务等等。然后把选出的数据存放在指定位置。我们假设用一趟扫描完成筛选工作。
  由于是数组元素是字节数据,那么我们可以分别用al和ah来存放已筛选的最小数和最大数。由于数组中最小的数不会小于0,最大的数不会大于255,所以我们就让ah在正式比较前清为0, 赋al初值为255。即:
xor ah,ah; ah清0
mov al,0ffh ;
  比较筛选过程当然选用循环结构来做比较简单。在进入循环前要先设置好循环记数器cx和第一个数组元素的地址si,那么就有:
mov cx,20;设置循环记数器
lea si,[buf1] ;取数组的起始地址给si
  比较循环体如下:
qu_xiao_de:
cmp al,[si] ;al比[si]小吗?
**e qu_da_de ;如果小于等于就跳转,否则向下继续
mov al,[si] ;取更小的数进入al
qu_da_de:
cmp ah,[si] ;ah比[si]大吗?
jae next ;如果大于等于就跳转,否则向下继续
mov ah,[si] ;取更大的数进入ah
next:
inc si ;调整数组下标指向下一个数组元素,为进入下一循环做好准备。
loop qu_xiao_de ;如果没扫描完则跳转到qu_xiao_de
;程序扫描完了,al和ah中就分别存放着从数组筛选出来的最小数和最大数,然后接着写存储数据的代码:
lea si,[buf2] ;把储存数据的内存首地址装入si
mov [si],al ;存储最小数
mov [si+1],ah;存储最大数
完整程序请LZ自己完成。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 7回复贴,共1页
<<返回汇编吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示