![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-31 20:04 |
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 求助!请将以下程序编制为COM文件 |
| 可打印版本 1,569 / 7 |
| 第1楼 zhjipt | 发表于 2006-12-04 11:18 |
| 初级用户 发帖 16 积分 40 | |
|
求助!请将以下程序编制为COM文件 此程序按COM文件格式编制,通过汇编、链接并转换为COM文件即可
***** :13.asm(13.com) :1993.11.28 code segment assume cs:code:ds:code org 100h be: jmp intt popp macro pop ds pop es pop di pop si pop dx pop cx pop bx pop ax popf endm :16进制数值转换为ACII码 hexasc macro add al,090h daa adc al,040h daa endm buff db 0 dat db 'CH:' chl db 0 ch2 db 0 db'CL:' c11 db 0 c12 db 0 db 'DH:' dh1 db 0 dh2 db 0 mseg db'(请选择w/r/空格)' oldint13 dd 0 newint13: sit pushf push ax push bx push cx push dx push si push di push es push ds push cs pup ds cmp ah,03 jz jxl jmp old jxl: cmp dl,80h jx jx2 jmp old jx2: push cx mov buff,ch mov cl,4 mov al,buff shr al,cl hexasc mov ch1,al mov al,buff and al,0fh hexasc mov ch2,al pop cx mov buff,cl mov al,cl mov cl,4 shr al,cl hexasc mov cl1,al mov al,buff and al,0fh hexasc mov c12,al mov buff,dh mov al,dh shr al,cl hexasc mov dhl,al mov al,buff and al,0fh hexasc mov dh2,al lea si,dat mov ah,03h mov bh,0 int 10h push dx mov dx,0029h mov cx,34 loopl: mov ah,02h int 10h mov bl,70h mov ah,09h lodsb int 10h inc dl loop loopl mov ah,02h pop dx int 10h wair:mov ah,0 int 16h cmp al,'w' jz old cmp al,'r' jz rett cmp al,' ' jnz wair cli mov ah,4ch int 21h rett: popp cli iret jmp cs:oldint13 intt: mov ax,3513h int 21h lea di,oldint13 mov[di],bx mov[di+2],es mvo dx,offset newint13 mov ax,2513h int 21h mov dx,offset intt inc dx int 27h code ends end be ***** |
|
| 第2楼 darkradx | 发表于 2006-12-05 00:46 |
| 高级用户 发帖 420 积分 972 | |
|
自己不弄个masm/tasm?
|
|
| 第3楼 19951001 | 发表于 2006-12-05 02:02 |
| 高级用户 发帖 272 积分 570 来自 北京 | |
|
做什么用的?
|
|
| 第4楼 zhjipt | 发表于 2006-12-07 17:15 |
| 初级用户 发帖 16 积分 40 | |
|
不行呀
|
|
| 第5楼 zhgwbzhd | 发表于 2006-12-09 23:30 |
| 高级用户 发帖 187 积分 506 | |
|
用debug吧,直接编译成.com
|
|
| 第6楼 本是 | 发表于 2007-01-06 03:46 |
| 银牌会员 发帖 790 积分 2,227 | |
|
你是照书录入的,应该刚学汇编,输入错误:
sit-->sti mvo-->mov jx-->jz 变量名(1与l,与ti要分清): cl1,cl2,dh1,dl1,loop1,jx1 wait,init jmp cs:oldint13丢失行号: old: 注释”16进制数值转换为ACII码“应以;开始 assume cs:code, ds:code中的逗号 改正后的源程序见下面: popp macro pop ds pop es pop di pop si pop dx pop cx pop bx pop ax popf endm ;16进制数值转换为ACII码 hexasc macro add al,090h daa adc al,040h daa endm code segment assume cs:code,ds:code org 100h be: jmp init buff db 0 dat db 'CH:' ch1 db 0 ch2 db 0 db 'CL:' cl1 db 0 cl2 db 0 db 'DH:' dh1 db 0 dh2 db 0 mseg db '(请选择w/r/空格)' oldint13 dd 0 newint13: sti pushf push ax push bx push cx push dx push si push di push es push ds push cs pop ds cmp ah,03 jz jx1 jmp old jx1: cmp dl,80h jz jx2 jmp old jx2: push cx mov buff,ch mov cl,4 mov al,buff shr al,cl hexasc mov ch1,al mov al,buff and al,0fh hexasc mov ch2,al pop cx mov buff,cl mov al,cl mov cl,4 shr al,cl hexasc mov cl1,al mov al,buff and al,0fh hexasc mov cl2,al mov buff,dh mov al,dh shr al,cl hexasc mov dh1,al mov al,buff and al,0fh hexasc mov dh2,al lea si,dat mov ah,03h mov bh,0 int 10h push dx mov dx,0029h mov cx,34 loop1: mov ah,02h int 10h mov bl,70h mov ah,09h lodsb int 10h inc dl loop loop1 mov ah,02h pop dx int 10h wait1: mov ah,0 int 16h cmp al,'w' jz old cmp al,'r' jz rett cmp al,' ' jnz wait1 cli mov ah,4ch int 21h rett: popp cli iret old: jmp cs:oldint13 init: mov ax,3513h int 21h lea di,oldint13 mov ,bx mov ,es mov dx,offset newint13 mov ax,2513h int 21h mov dx,offset init inc dx int 27h code ends end be [ Last edited by 本是 on 2007-1-6 at 03:57 AM ] |
|
| 第7楼 本是 | 发表于 2007-01-06 03:57 |
| 银牌会员 发帖 790 积分 2,227 | |
|
程序的作用是:运行后驻留内存,并替换INT 13h磁盘处理中断,是写第1硬盘则询问w写、r读、空格则退回DOS(可改为不作任何磁盘操作而返回中断调用程序----删除行末有;;的行并改动提示信息为w to write hd0, r to read only)。
另外,程序中数字转化部分写得啰嗦,键盘测试部分不周全,这样的程序是底层的信息,不一定在汉字系统下运行,所以进一步改进如下: pushh macro push ax push bx push cx push dx push si push di push es push ds endm popp macro pop ds pop es pop di pop si pop dx pop cx pop bx pop ax popf endm ;16进制数值转换为ACII码 hexasc macro add al,090h daa adc al,040h daa endm code segment assume cs:code,ds:code org 100h be: jmp init dat db 'CH:',0,0,'CL:',0,0,'DH:',0,0 mseg db 'Enter (w/r/SPACE):' msglen=$-dat hex2str: add di,3 mov cl,4 mov al,bh shr al,cl hexasc stosb mov al,bh and al,0fh hexasc stosb ret oldint13 dd 0 newint13: sti pushf pushh push cs pop ds cmp ah,03 jz jx1 jmp old jx1: cmp dl,80h jz jx2 jmp old jx2: lea di,dat push cx mov bh,ch call hex2str pop cx mov bh,cl call hex2str mov bh,dh call hex2str lea si,dat mov ah,03h mov bh,0 int 10h push dx mov dx,0029h mov cx,msglen ;34 loop1: mov ah,02h int 10h mov bl,70h mov ah,09h lodsb int 10h inc dl loop loop1 mov ah,02h pop dx int 10h wait1: mov ah,0 int 16h cmp al,'w' jz old cmp al,'W' jz old cmp al,'r' jz rett cmp al,'R' jz rett ;; cmp al,' ';; jnz wait1 cli ;; mov ah,4ch;; int 21h ;; rett: popp cli iret old: jmp cs:oldint13 init: mov ax,3513h int 21h lea di,oldint13 mov ,bx mov ,es mov dx,offset newint13 mov ax,2513h int 21h mov dx,offset init inc dx int 27h code ends end be [ Last edited by 本是 on 2007-1-6 at 04:40 AM ] |
|
| 第8楼 本是 | 发表于 2007-01-06 04:43 |
| 银牌会员 发帖 790 积分 2,227 | |
|
注意原INT 13h的中断向量并未保存,此程序仅供高手或虚拟机中使用,否则;)会“麻烦”!!!
[ Last edited by 本是 on 2007-1-6 at 04:45 AM ] |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |