Assembly Name Sort

本文介绍了名为NameSort.asm的程序,它通过一系列步骤来收集并处理用户输入的名字,最终实现名字的排序,并以有序的方式展示给用户。该程序利用了回车换行符、字符串读取和存储等技术,通过读取用户输入的名字,存储到相应的数组中,并对名字进行排序。排序过程采用了一种特定的排序算法,最后展示了排序后的名字列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

;-------------------------------------------------------------------------
; Project: NameSort.asm
; Name: zwp
; Date: 2013.10
;-------------------------------------------------------------------------



.MODEL	SMALL
.STACK	40H

; 数据段定义
.DATA

	namepar		label		byte						; name parameter list
	maxnlen		db			21							; name's max length
	namelen		db			?
	namefld		db			21 dup(?)				; 21 个?
	crlf			db			13, 10, '$'				; 回车换行
	endaddr		dw			?
	message1		db			'Name?', '$'			; '$' 为字符串结尾标志字符
	message2		db			'Sorted names:', 13, 10, '$'
	namectr		db			 0
	nametab		db			 30 dup(20 dup(' '))	; 30 个元素每个元素20个空格
	namesav		db			 20 dup(?), 13, 10, '$'
	swapped		db			 0

.CODE
begin			proc		far

				mov	ax, @data
				mov	ds, ax				
				mov	es, ax							; 将数据放入数据段中
				
				cld										; 方向标志置0
				lea	di, nametab						; di = nametab 的偏移地址
				
a20loop:
				call	b10read
				cmp	namelen, 0			
				jz		a30								; 如果名称长度为0跳转至a30
				
				cmp	namectr, 30						; 输入30个名称
				je		a30
				call	d10stor	
				jmp	a20loop							; 输入结束
				
				
a30:
				cmp	namectr, 1						; 1 or 没有名称输入
				jbe	a40								; 若小于等于1个
				call	g10sort							; 调用排序
				call	k10disp
				
a40:
				mov	ah, 1								; 获取输入为了暂停
				int	21h
				mov	ax, 4ch
				int	21h
				
begin		endp


b10read		proc			near
				
				mov	ah, 09h							; 从键盘获取输入
				lea	dx, message1					; dx = message1的偏移地址
				int	21h
				
				mov	ah, 0ah							; 换行
				lea	dx, namepar						; dx = namepar 的偏移地址
				int	21h
				
				mov	ah, 09							; 从键盘获取输入
				lea	dx, crlf							; dx = crlf 的偏移地址
				int	21h
					
				mov	bh, 0								; 清除名称之后的字符
				mov	bl, namelen						; 名称长度
				mov	cx, 21							; 循环21次
				sub	cx, bx							; cx -= bx
				
b20:
				mov	namefld[bx], 20h				; 设置到块
				inc	bx									; cx++
				loop	b20								; cx--
				ret

b10read		endp


;--------------------------------------------------------------
d10stor			proc		near

				inc	namectr
				cld										; 方向标志置0
				lea	si, namefld						; si = 名称的偏移地址
				mov	cx, 10							; 循环10次
				rep	movsw								; cx--
				ret

d10stor		endp


;--------------------------------------------------------------
g10sort		proc			near
				sub	di, 40							; di = di - 40
				mov	endaddr, di						; endaddr = di
				
g20:
				mov	swapped, 0
				lea	si, nametab						; si = nametab 的偏移地址
				
g30:
				mov	cx, 20							; 循环20次
				mov	di, si
				add	di, 20							; 下一个名称去比较
				mov	ax, di
				mov	bx, si
				repe	cmpsb								; 余下一个名称相互比较傲
				jbe	g40								; 若果小于等于
				call	h10xchg							; 将换元素
				
g40:
				mov	si, ax
				cmp	si, endaddr
				jbe	g30								; 若小等于
				cmp	swapped, 0
				jnz	g20								; 若swapped不为0
				ret
				
g10sort		endp


;---------------------------------------------------------------

h10xchg			proc		near

				mov	cx, 10
				lea	di, namesav						; ax = namesav的偏移地址
				mov	si, bx
				rep	movsw								; cx-- ds:[si] = es:[di]
				
				mov	cx, 10
				mov	di, bx							; di = bx
				rep	movsw								; cx-- ds:[si] = es:[di]
				
				mov	cx, 10
				lea	si, namesav
				rep	movsw								; cx-- ds:[si] = es:[di]
				mov	swapped, 1
				ret
				
h10xchg		endp


;---------------------------------------------------------------------

k10disp		proc		near

				mov	ah, 09h							; 从键盘获取输入
				lea	dx, message2
				int	21h
				lea	si, nametab
				
k20:
				lea	di, namesav
				mov	cx, 10
				rep	movsw
				
				mov	ah, 9								; 从键盘获取输入
				lea	dx, namesav
				int	21h
				dec	namectr							; namectr--
				jnz	k20								; 若不为0循环
				ret
				
k10disp		endp

end 	begin

				
				
				


				
				

                    加油:每天进步一点点!!
from Bio import Entrez import time from urllib.parse import urljoin # 设置Entrez邮箱(NCBI要求) Entrez.email = "your_email@example.com" # 替换为您的邮箱 # 输入文件和输出文件 input_file = "taxid.txt" output_file = "ftp_links.txt" def get_ftp_link(taxid): """ 根据TaxID获取参考基因组的FTP链接(直接指向基因组文件) """ try: # 搜索条件:当前生物TaxID,且为最新或参考基因组,按日期降序排序 term = f"txid{taxid}[Organism] AND (latest[filter] OR reference[filter])" handle = Entrez.esearch( db="assembly", term=term, sort="date desc", retmax=1, # 仅取最相关的一个结果 retmode="xml" ) record = Entrez.read(handle) handle.close() if not record["IdList"]: print(f"警告: TaxID {taxid} 未找到匹配的基因组Assembly") return None assembly_id = record["IdList"][0] # 获取Assembly详细信息 handle = Entrez.efetch(db="assembly", id=assembly_id, retmode="xml") assembly_data = Entrez.read(handle) handle.close() summary = assembly_data['DocumentSummarySet']['DocumentSummary'][0] # 优先使用RefSeq路径,其次GenBank ftp_dir = summary.get('FtpPath_RefSeq') or summary.get('FtpPath_GenBank') if not ftp_dir: print(f"错误: TaxID {taxid} 的Assembly无FTP路径") return None # 构造基因组文件完整路径 dir_name = ftp_dir.strip('/').split('/')[-1] file_name = f"{dir_name}_genomic.fna.gz" ftp_url = urljoin(ftp_dir + '/', file_name) return ftp_url except Exception as e: print(f"处理TaxID {taxid} 时发生异常: {str(e)}") return None def main(): # 读取TaxID列表 with open(input_file, "r") as f: taxids = [line.strip() for line in f if line.strip()] # 获取所有有效链接 ftp_links = [] for idx, taxid in enumerate(taxids, 1): print(f"处理中 ({idx}/{len(taxids)}) TaxID: {taxid}...") link = get_ftp_link(taxid) if link: ftp_links.append(link) print(f"成功获取链接: {link}") else: print(f"未找到TaxID {taxid} 的链接") time.sleep(0.34) # 控制请求频率(~3次/秒) # 写入输出文件 with open(output_file, "w") as f: f.write("\n".join(ftp_links)) print(f"\n完成!共找到 {len(ftp_links)} 个链接,已保存至 {output_file}") if __name__ == "__main__": main()
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值