问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求 用汇编语言写一个简单的程序 急~!!!

发布网友 发布时间:2022-04-21 21:20

我来回答

1个回答

热心网友 时间:2023-11-05 01:10

data segment
VDef db 'viruscode';存放病毒特征码
LenVDef = ($-VDef);病毒特征码长度
RepChar equ <90h>;定义要替换的安全字节,这里90H是NOP指令的机器码,可以换成其他字符
FBuff db 1024 p(?);文件缓冲区
LenBuff = ($-FBuff);文件缓冲区长度
FileName db 128;用户输入的要查毒的文件名字(可含路径)
db ?
db 128 p(?)
FileTmp db 'ftmp.tmp',0
hFSrc dw ?
hFTmp dw ?
dwTmp dw ?;定义一个临时变量
msg0 db 'Input FileName:$'
msg1 db 'Open File Error!$'
msg2 db 'Found Virus and Cleaned!$'
msg3 db 'No virus found!$'
menu db '1--Input FileName 2--Scan 3--Exit:$'
data ends

CRLF macro
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
endm

ShowMsg macro x
mov ah,09h
lea dx,x
int 21h
endm

code segment
assume cs:code,ds:data,es:data
FindInStr proc far
;入口参数,形参
;[bp+12]=string2的长度,字
;[bp+10]=string1的长度,字
;[bp+8]=string2的开始地址
;[bp+6]=string1的开始地址

;以下为局部变量
;[bp-2]=string1位置变量,字
;[bp-4]=最大查找次数,字
;出口:AX=如果STR2在STR1中,则为第一次匹配时的位置(在第一个字符为0000H),如果没找到,则为0FFFFH
push bp
mov bp,sp
add sp,-4

mov ax,[bp+10]
cmp ax,[bp+12]
jae @F;判断两个字符串的长度
mov ax,0FFFFH
jmp RetHere

@@:
;局部变量初始化
mov si,[bp+8]
mov di,[bp+6]
mov [bp-2],di
mov ax,[bp+10]
sub ax,[bp+12]
inc ax
mov [bp-4],ax

cld
mov cx,[bp-4]
LP_CMP:
push cx
mov si,[bp+8]
mov di,[bp-2]
mov cx,[bp+12]
repe cmpsb
jne @F
mov ax,[bp-2]
sub ax,[bp+6]
jmp RetHere
@@:
inc word ptr [bp-2]
pop cx
loop LP_CMP

mov ax,0FFFFH
RetHere:
mov sp,bp
pop bp
ret 8
FindInStr endp

ScanVirus proc far
;入口参数:hFSrc存放要扫描的文件句柄
;出口参数:AX=0代表无病毒,AX=1代表有病毒
;局部变量
;[bp-2]=0代表无病毒,=1代表有病毒,字
push bp
mov bp,sp
add sp,-2

mov word ptr [bp-2],0;先将标志初始化为0,无毒

mov ah,3ch
xor cx,cx
lea dx,FileTmp
int 21h;创建临时文件
mov hFTmp,ax

L_ReadFile:
mov ah,3fh
mov bx,hFSrc
mov cx,LenBuff
lea dx,FBuff
int 21h;顺序读取源文件的LenBuff个字节,存到缓冲区

or ax,ax;测试是否已经到达文件尾
jz L_EOF
mov dwTmp,ax;保存实际读取的字节数
@@:
mov ax,LenVDef
push ax
mov ax,dwTmp
push ax
lea ax,VDef
push ax
lea ax,FBuff
push ax
call FindInStr
cmp ax,0FFFFH
jz @F
mov bx,ax
mov word ptr [bp-2],1;有毒
mov al,RepChar
mov cx,LenVDef
cld
lea di,FBuff
add di,bx
rep stosb;杀毒
jmp @B
@@:
;存储无毒的FBuff
mov ah,40h
mov bx,hFTmp
mov cx,dwTmp
lea dx,FBuff
int 21h
jmp L_ReadFile

L_EOF:
mov ah,3eh
mov bx,hFTmp
int 21h;关闭临时文件
mov ax,[bp-2]
mov sp,bp
pop bp
ret
ScanVirus endp

start:
mov ax,data
mov ds,ax
mov es,ax

L_Menu:
CRLF
ShowMsg menu;打印功能菜单

mov ah,01h
int 21h;用户输入选择

cmp al,'1'
jb L_Menu
cmp al,'3'
ja L_Menu

je Done;用户选择退出
cmp al,'1'
jne L_scan

;用户选择输入要查毒的文件
@@:
CRLF
ShowMsg msg0;提示用户输入文件名
mov ah,0ah
lea dx,FileName
int 21h
mov bl,FileName+1
or bl,bl;测试用户是否直接回车,忘记输入文件名
jz @B

xor bh,bh
mov byte ptr FileName[bx+2],0;变成文件名ASCII-Z串
jmp L_Menu

L_scan:
CRLF
mov ah,3dh
mov al,0
lea dx,FileName+2
int 21h;打开源文件

jc L_OpenErr;如果打开文件出错

mov hFSrc,ax
call ScanVirus
or ax,ax
jz L_NoVirus

ShowMsg msg2
mov ah,3eh
mov bx,hFSrc
int 21h;关闭源文件
mov ah,3ch
xor cx,cx
lea dx,FileName+2
int 21h;删除有毒源文件,并创建新文件
mov hFSrc,ax
mov ah,3dh
mov al,0
lea dx,FileTmp
int 21h;打开无毒的临时文件
mov hFTmp,ax

;复制文件
@@:
mov ah,3fh
mov bx,hFTmp
mov cx,LenBuff
lea dx,FBuff
int 21h
mov dwTmp,ax
or ax,ax
jz @F
mov ah,40h
mov bx,hFSrc
mov cx,dwTmp
lea dx,FBuff
int 21h
jmp @B
@@:
mov ah,3eh
mov bx,hFSrc
int 21h;关闭源文件
mov ah,3eh
mov bx,hFTmp
int 21h;关闭临时文件
mov ah,41h
lea dx,FileTmp
int 21h;删除临时文件
jmp L_Menu

L_NoVirus:
;如果没有病毒
ShowMsg msg3

mov ah,3eh
mov bx,hFSrc
int 21h;关闭源文件

mov ah,41h
lea dx,FileTmp
int 21h;删除临时文件
jmp L_Menu

L_OpenErr:

ShowMsg msg1;提示打开文件错误
jmp L_Menu

Done:
mov ax,4c00h
int 21h
code ends
end start
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
黑鱼身上有寄生虫吗 寄生虫是否可能存在于鱼的身体里? 取保候审没拘留怎么办 支付宝开通快捷支付后,能在支付宝查银行卡余额吗? 秋天,正是吃板栗的季节,分享7种经典吃法别错过,老少皆宜! CHOW TAI SENG 周大生 P0PC0078 桃花Pt950铂金项链 购买最佳价格 周大生的钻戒PT950 0.27ct I-J VS 7892元贵吗? 周大生铂950项链J1909011916 重量:4.69g 和Pt950吊坠J191000191967 重量... CHOW TAI SENG/周大生 P0PC0078 桃花Pt950铂金项链 45cm 3.63g-详细介... 白金多少钱一克PT950 雷克萨斯es350洗节气门怠速高怎么调 怎样在DOS中用卡巴斯基杀毒(XP) 如何分析Oracle 在淘宝买的超声波传感器测距模块 附带的测试程序,... 用java写一个程序,计算10个学生的总分和平均分。 请用JAVA编程输入一个语句进行词法分析 马兰士sr5200显示红色喇叭是什么意思 java语言 输入素质成绩,机试成绩,笔试成绩,计算并... dual-scan与es590怎么连接 雷克萨斯es250广播频道如何设置? 准分子激光治疗仪都有什么牌子的?能提供参数吗? 我用Xbox360把我U盘格式化了,传不了游戏进去了 在xbox360上怎么格式化u盘 安装360 8.0后u盘插入后有即插即用符号,但无盘符 U盘插入后360没有反应,并且打不开,说是请插入磁... 我昨天用U盘好好的 ,今天我插上电脑360U盘保镖一... 360电脑专家能修复u盘吗? 360u盘格式化后数据能恢复吗 U盘被写入保护,无法格式化,U盘没有任何按钮之类... 系统U盘不能格式化怎么办? 在51单片机上如何让数码管流水式的显示16进制数, 杀毒软件把E盘运行程序给删了,怎么恢复? 熊猫烧香病毒的传染机制 美国影片 关于御术师的电影我不记得名字了里面有个... 关于名词变复数 以O结尾的名词 微信读书无限卡没有到期,怎么看不了了 微信读书中不知道点了哪里,正在读的书看不了了 谁有DA师免费在线观看地址 谁知道电视剧《DA师》在哪下载或可以在线观看? 徐洪浩饰演景晓书的军旅电视剧是哪部? 一个电脑高手帮老板娘调试20台电脑没给钱的是什么... 徐洪浩在哪部电视剧里演电脑高手 da师电视剧里士兵拍戏龙师长发飙是那一集 DA师的介绍 表格有一个发货日期,一个收货日期,从发货到收货... 演龙凯锋电视剧名称是叫什么名 用IF函数比较日期,公式如何设置? 电视剧《DA师》和《士兵突击》,哪个好看些? EXCEL中IF函数关于日期的问题 有人说电视剧《DA师》在电视制作方面有硬伤,为什么?