如何用Perl从8.3 DOS路径中获得完整的Win32路径?
我的问题基本上说明了一切.我明白了: C:\DOCUME~1\frew\MYDOCU~1\Code\AIRCRA~1\lib\ACD\VALIDA~1.PM 我想要这个: C:\Documents and Settings\frew\My Documents\Code\aircraft_ducting\lib\ACD\Validators.pm 我看了file :: spec :: win32,但似乎没有任何能力的东西. 想法? 谢谢! 解决方案 您可以使用 来自Win32模块. 其他解决方案
0 2023-05-24
编程技术问答社区
如何在批处理For循环中处理文件名的空间?
@echo off echo processing please wait... setlocal enabledelayedexpansion set txtfile=%~dp0mysql\my.ini.bak set newfile=%~dp0mysql\my.ini if exist "%newfile%" del /f /q "%newfile%" for /f "tokens=*" %%a in (%txtfile%) do ( set newline=%%a echo !newline! >> %newfile% ) 现在my.ini.bak文件在d:\ program文件\ my.ini.bak 错误:系统找不到文件文件\ mysql \ my.ini.bak. 如何使此代码工作,因此它将每行从my.ini.bak复制到my.ini 解决方案 我认为您不需要引用路径,您只能在扩展的路径中使用短名称.因此,使用%〜DP而不是%〜DP @e
0 2023-05-21
编程技术问答社区
汇编中的按值传递和按引用传递
我正在尝试解决这个问题: 创建一个 proc 过程,该过程将一个参数作为按值传递,并根据传递的数字作为参数打印'x'的数字. 在打印之前,请确保参数为正数,在程序结束时,您需要更改已使用回到其第一个值的寄存器. 如果过程的输入为5,则控制台上的输出应为: xxxxx 这是我的代码: var db 5 ;In the dataseg push [var] ;in the codeseg proc example pop cx cmp cx,0 ja print print: mov dl, 'X' mov ah, 2h int 21h loop print ret endp example 此代码会按预期工作,如果没有,为什么?如何修复? 解决方案 不,您的代码被严重打破. 函数通过mov ecx, [esp+4]之类的东西从
0 2023-05-19
编程技术问答社区
逆向工程的旧油漆程序
我有几个非常旧的基于MSDOS的油漆程序.他们在调色板索引图像缓冲区上工作.它们具有许多壮观的形状绘图工具,刷子和效果,这些工具在任何现代的油漆程序中都不存在 - 尤其是在低调索引索引图像的"范围"之内.我想在现代程序中重现许多这些出色的工具,以使它们更容易被自己和公众访问,而不必启动像Dosbox这样的仿真器.但是我有问题. 尽管许多这些刷子,工具和事物都具有明显的功能,但其实现应该相当简单.但是有了其他工具,它们的运营原则并不那么明显.我会坚持确定正确或忠实的算法来实施这些算法. 如果您是我,您会采用什么方法?是否可以容易地处理这样的旧程序?还是您会采用一些不同的方法,例如有条不紊地测试不同输入的算法以推断基础函数?不同技术的某种组合?对于这些程序的一行,这些(商业)程序的原始作者是已知的,现在是狂热的开源倡导者.我应该只是尝试直接与他们联系并询问吗?我在逆向工程方面并不是特别经验,所以我在从哪里开始. 编辑:看来"问和你们应收到"确实有效. 编辑2:看看 h
0 2023-05-16
编程技术问答社区
将领先的零位设置为任何尺寸的整数C ++
我想在标准C ++中将领先的零位设置为1个整数. 例如 0001 0011 0101 1111-> 1111 0011 0101 1111 我发现这样做的所有算法都需要一个相当昂贵的领先零计数.但是,这很奇怪.有非常快速,简单的方法可以执行其他类型的位操作,例如: int y = -x & x; //Extracts lowest set bit, 1110 0101 -> 0000 0001 int y = (x + 1) & x; //Will clear the trailing ones, 1110 0101 - > 1110 0100 int y = (x - 1) | x; //Will set the trailing zeros, 0110 0100 - > 0110 0111 因此,这使我认为必须有一种方法可以将整数的领先零设置为由基本位明智操作员组成的简单代码行.请告诉我,这是希望的,因为现在我要定居是为了扭转整数中的位顺序,然后
10 2023-05-12
编程技术问答社区
BIOS INT 13H与AH=2每次只能读取72个扇区。为什么?
我正在使用Bochs 2.4.5编写引导扇区代码.我使用INT 13H读取Floppy的扇区.但是我发现,如果该行业数量读取> 72,那么INT13将会失败.返回代码为AH = 1.以下是代码,这里是 int13 .返回代码为AH =1. 为什么INT 13H不能读取超过72个扇区? xorb %ah, %ah xorb %dl, %dl int $0x13 # reset the floppy movw $0x8000, %ax movw %ax,%es movw $0, %bx # ES:BX is the buffer movb $0x02, %ah movb $73, %al # how many sectors to read. 72 is ok, but >=73 is wrong. movb $0, %ch movb $1, %cl movb $0, %dh
2 2023-05-11
编程技术问答社区
C++中的System()调用以及它们在编程中的作用
我经常听说使用system("PAUSE")是不良练习,而是使用std::cin.get().现在,我对系统调用的理解是,他们将其输入系统命令行并与OS交谈的字符串,因此暂停是暂停命令窗口中输出的DOS命令.我认为这与具有不同关键字的MAC和UNIX相似,并且由于缺乏交叉操作系统兼容性而不建议使用系统调用. (如果我对此有错,请纠正我) 我的问题是:使用System()调用何时合适?应该如何应用它们?什么时候不应该应用? 解决方案 system("PAUSE")当然不是理想的.使用对系统的调用会创建一个子过程,在Windows上,该子过程相当昂贵,无论如何在任何操作系统上都不便宜.在嵌入式系统上,内存开销很重要. 如果有任何方法可以在本地痛苦的情况下做任何事情,那就去做.如果等待用户按下单个按钮,cin.get()将很难击败.在这种情况下,您的应用程序过程将仅在STDIN上阻止,仅设置内核可见的几个标志,最重要的是,没有分配新的内存,并且没有创建新的调度实体,甚至没有
2 2023-05-11
编程技术问答社区
在DOS/Batch中,08小于1,但07却大于1。为什么?
在dos/batch中, if 08 lss 1 echo true 回声" true".同样适用于09.08和09小于1. 但是, if 07 lss 1 echo true 没有回声. 01至07不小于1. 为什么?什么是08和09的特别之处? 解决方案 通常,领导0表示您希望在 octal .我希望08或09实际上是错误条件;也许批处理语言没有很好的机制来表示输入不正确? 其他解决方案 扩展了Sarnold和David Schwartz已经提供的答案... 我从未见过任何文档,这些文档指出,如果支持八进制或十六进制数字表示法.但是您的问题促使我进行了一些测试,实际上它确实支持了设置/A支持的相同数字表示法. 任何以0开头的数字[0-9]被解释为十进制. 前缀为0的任何数字[0-7]都解释为八分之一. 以0x或0x的前缀为六核. 任何不满足上面3个数字符号中任何一个的字符都被视为字符串. 如果比较的两侧都是有
0 2023-04-30
编程技术问答社区
行结问题 DOS > Linux > Java
我在160.000行文件中遇到了一些麻烦,此文件是通过XLSX文件的导出生成的,它具有.txt扩展名,但恐怕它已导出为DOS.文件,在每行的末尾,它都有DOS线路断裂. 我使用的是用Java编写的解析器,在Ubuntu环境上运行,并且在运行解析器时得到了这个(我无法编辑,因为它的一部分是我无法访问源代码的一部分)预计会有一个数字,我的行结束了: 4449 但是解析器将其视为 For input string: "4449 " dos2unix winfile.txt unixfile.txt 参考: dos2unix man page 其他解决方案 解析器正在找到 ,这是Windows运输返回;但是,它无法解析这些字符.转到文件并运行快速命
4 2023-04-22
编程技术问答社区
移除CR行结束语
首先,我要说的是我已经阅读这篇文章但是我仍然有CR line terminators的问题. 有一个叫做build_test.sh的文件,我在leafpad中进行了编辑,可以在Vim中显示: cp ~/moonbox/llvm-2.9/lib/Transforms/MY_TOOL/$1 test.cpp cd ~/moonbox/llvm-obj/tools/TEST_TOOL/ make make install cd - 但是: 使用cat build_test.sh它输出 nothing . 使用more build_test.sh它输出:cd - install/llvm-obj/tools/TEST_TOOL/Y_TOOL/$1 test.cpp 使用less build_test.sh它输出:cp ~/moonbox/llvm-2.9/lib/Transforms/MY_TOOL/$1 test.cpp^Mcd ~/moonbox/llvm-obj
2 2023-04-22
编程技术问答社区
为什么我们在消息DB中使用10,13, 'foo $'?
这是8086微处理器上编写的汇编语言中编写的代码.该代码查找数字是正面的还是负面的.我了解代码,但无法理解该代码的第四和第五行. ;FIND A NUMBER THAT WAS POSITIVE OR NEGETIVE DATA SEGMENT X DW 28H MSG1 DB 10,13, 'NUMBER IS POSITIVE $' MSG2 DB 10,13, 'NUMBER IS NEGETIVE $' DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV AX, X ROL AL, 01H JC NEGA LEA DX, MSG1
20 2023-04-22
编程技术问答社区
通过Telnet运行应用程序
我需要创建一个通过Telnet运行应用程序的BAT文件,但是据我所知,没有办法在DOS上执行此操作. TELNET不允许在连接的瞬间将任何命令发送到远程计算机,并且只有在Telnet停止之后才能执行BAT文件中的每个后续命令.这个假设的代码说明了我想做什么: telnet 100.99.98.1 "C:\Application\app.exe -a -b -c" ,这将在机器上运行App.exe 100.99.98.1带有三个参数.尽管我付出了巨大的努力,但没有任何努力.有办法做到吗? tks, pedrin batista 解决方案 给出来自网页: 期望是自动化的工具 交互式应用,例如 telnet ,ftp,passwd,fsck,rlogin, 提示等.期望真正使这个 琐碎的东西.期望也很有用 用于测试这些相同的应用程序. 其他解决方案 您是否尝试过: echo "c:\application\app.exe -a -b -c" |
2 2023-04-21
编程技术问答社区
DOS INT 21H功能0AH在nasm风格中的作用
我正在尝试使用NASM重写彼得·亚伯(Peter Abel)的" IBM PC汇编语言和编程"(第15版)中的汇编程序.这是关于缓冲输入的演示,第1章. . 该程序等效于C编程 char name[20]; scanf("Name?%s", &name); /*print the input name in the middle of the screen 25 * 80*/ .... 我的重写程序是: ;file: A08CTRNM.asm segment data paralist: maxlen: db 20 ;The maximum length of the string will be 20 actulen: resb 1 ;Which character we have inputed now buffer: times 20 db 0 ;The buffer where the string is buffere
8 2023-04-20
编程技术问答社区
遵循汇编代码有什么问题?
代码要输入字符串 在Windows机器上使用NASM组装:nasm file.asm -o file.com ;read the string mov ah,0x0A ;read mov dx,buffer ;pointer to buffer int 0x21 ;newline mov ah,2 mov dl,10 int 0x21 mov dl,13 int 0x21 ;put $ sign at end of string mov bx,buffer+1 mov dx,buffer+2 add dl,byte[bx] mov bx,dx mov byte[bx],'$' ;output mov dx,buffer+2 mov ah,9 int 0x21 ;exit mov ah,0x4c int 0x21 ;buffer buffer: db 255 ;len of buffer db 0 ;num of char read db 255 ;
6 2023-04-20
编程技术问答社区
比较组装中的字符,nasm
我试图从用户那里获得输入,然后我想根据用户放入的内容输出一些文本. 我的问题是出于某种原因,它总是认为这是一个,我不知道为什么. 您可以在下面找到我的代码: bits 16 org 0x100 jmp main message: db 'Please enter a A or B:',0ah,0dh,'$' character: db 1 outp_a: db 'IT IS A',0ah,0dh,'$' outp_b: db 'IT IS B',0ah,0dh,'$' finish db 'good bye',0ah,0dh,'$' clearscreen: mov dx, 10 mov bh, 0 mov ah, 2 int 10h mov cx,
24 2023-04-20
编程技术问答社区
钩住Int 09h中断
我有一个问题挂钩int 09h,我将指针更改为新的ISR,如果我在Windows上进行调试,则每次我按键时都会触发中断.但是在VMware中,似乎只触发一次,而不再触发.我已经在DOS 6.22中进行了测试,并且发生完全相同. 我的代码看起来像这样: MyIsr: pusha pushf ;tell PIC that interrupt has finished mov al,0x20 out 0x20,al popf popa iret 如果我使用USB键盘,我可以发送相同的命令,例如PS/2? 解决方案 这里可能有许多问题,因为您尚未发布您正在编写的代码的完整视图.您能确切地解释一下您要完成的工作吗? 如果一个ISR被称为并且没有处理,则您将无法做任何事情,因此请记住这一点.您的问题可能与您如何在中断向量表中安装ISR有关. 在实际模式下,您可以使用int 21H,ah = 25H
10 2023-04-20
编程技术问答社区
帮助在NASM汇编中为DOS编写TSR程序(s)
我一直在尝试在MS-DOS的汇编(16位)中编写TSR(终止居民)程序(通常).我已经阅读了Wikipedia页面 在TSR上以及专门在DOS中使用它的页面(但它似乎是在C中进行教学,而不是直接组装).我查看了一个带有大量DOS中断文档的网站,并找到这个 ,这个,而另一个与TSR程序最相关.我无法发布所有链接,因为作为新用户,我可以在帖子上最多有2个超链接. 因此,我尝试在NASM中以实际模式平面模型(.com文件格式)编写(看似)非常简单的TSR程序.这是代码: [BITS 16] [ORG 0x0100] [SECTION .text] Start: ; Get current interrupt handler for INT 21h mov AX,3521h ; DOS function 35h GET INTERRUPT VECTOR for interrupt 21h int 21h ; C
0 2023-04-20
编程技术问答社区
如何在Debian上编译DOS程序?
对于我的汇编语言课,我们正在使用DPMI编写DOS程序.不幸的是,我无法一直访问32位Windows机器.我确实在我使用的每台计算机上都安装了Debian虚拟机. 我已经安装了Dosbox和Dosemu.有什么办法可以在Linux而不是DOS中组装和编译程序?我正在使用NASM,所以我似乎没有任何问题将其汇编DOS格式.但是,我很难通过我的C代码通过编译器运行它并获得DOS可执行文件(使用GCC或MingW). 有什么方法可以做到这一点,还是我几乎必须在DOS下安装所有工具? 解决方案 我什至不确定是否可以使用GCC编译DOS应用程序.很久以前,有一个GCC编译器变化称为DJGPP(或类似的东西).我从来没有工作. 这些天您可以跨编译GCC的机会几乎为零. 我建议您尝试一下旧的Watcom编译器.它是本机DOS编译器,它的DPMI实现也像Dosbox下的魅力一样工作.与NASM编译的对象文件进行接口也不是问题(我做了几年) 今天,编译器已成为开源,称
36 2023-04-20
编程技术问答社区
对NASM的数据一无所知
section .data map db 1 section .text start: cmp byte [map], 1 je exit jmp start exit: ret 我没有运气阅读数据.我的意思是,我将二进制DOS com格式组装在一起,当我启动时,它就会冻结.有人可以告诉我我做错了什么吗? 解决方案 DOS COM文件有望在地址0x100上加载.您应该在代码开头中加入org 0x100.
2 2023-04-20
编程技术问答社区
X86视频模式清除屏幕
您好,我试图使用此代码以DOS视频模式清除屏幕. 但是当我运行它时,点仍然在那里! org 100h mov ah, 0 ; set display mode function. mov al, 13h ; mode 13h = 640x480 pixels, 256 colors. int 10h ; set it! mov cx, 10 ; column mov dx, 10 ; row mov al, 15 ; white mov ah, 0ch ; put pixel int 10h ; draw pixel ; ------- clear the screen ---------- ; ------- doe
2 2023-04-20
编程技术问答社区