首页
社区
课程
招聘
有篇文章,内有bug,请感兴趣的帮忙分析改正。文章如下:
发表于: 2004-10-4 13:23 3863

有篇文章,内有bug,请感兴趣的帮忙分析改正。文章如下:

2004-10-4 13:23
3863
标 题:我写的一个小程序,改变分区序列号。编译成COM文件执行。 (2千字)
发信人:WenXinJY
时 间:2002-2-18 22:23:14
详细信息:

CSEG  SEGMENT
      ASSUME CS:CSEG,DS:CSEG,ES:CSEG
      ORG 100H

START:
      mov ah,9
      mov dx,offset MsgInputDisk
      int 21h
      mov ah,1
      int 21h
      or al,20h
      cmp al,'a'
      jb ErrorInput
      cmp al,'z'
      ja ErrorInput
      jmp GetDiskOrder

GetDiskOrder:
      sub al,'a'
      inc al
      mov bl,al
      mov bh,0
      push bx          ;Push Disk Number
      mov dx,offset DiskInfo
      mov ax,6900h
      int 21h
      jnc GetDiskInfoOK
      jmp AccessError

ErrorInput:
      mov dx,offset MsgErrorInput
      jmp Exit

GetDiskInfoOK:
      mov bx,4
      mov cl,4
      mov si,offset LongDiskSN-1
      mov di,offset lpSerialNum
NextByte:
      mov al,[si+bx]
      mov ah,al
      shr al,cl
Bin2Asc:
      and al,0fh
      add al,'0'
      cmp al,'9'
      jna StoreAsc
      add al,7
StoreAsc:
      stosb
      mov al,ah
      add bh,80h
      jnz Bin2Asc
      dec bl
      jnz NextByte

      mov ah,9
      mov dx,offset MsgDiskSN
      int 21h

      mov ah,9
      mov dx,offset MsgInputDisk
      int 21h
      mov ah,0ah
      mov dx,offset InputBuffer
      int 21h
      cmp byte ptr InputBuffer[1],8
      jne ErrorInput

      mov si,offset InputedDiskSN
      mov cx,8
      mov di,offset LongDiskSN+3
      mov ah,0
Asc2Bin:
      lodsb
      cmp al,'0'
      jb ErrorInput
      cmp al,'9'
      ja A2F
      sub al,'0'
      jmp StoreBin1
A2F:
      or al,20h
      cmp al,'a'
      jb ErrorInput
      cmp al,'f'
      ja ErrorInput
      sub al,'0'+7
StoreBin1:
      add ah,80h
      je StoreBin2
      mov bl,al
      shl bl,1
      shl bl,1
      shl bl,1
      shl bl,1
      loop Asc2Bin
StoreBin2:
      or al,bl
      stosb
      dec di
      dec di
      loop Asc2Bin

      pop bx
      mov ax,6901h
      mov dx,offset DiskInfo
      int 21h
      jnc OK
AccessError:
      mov dx,offset MsgAccessError
      jmp Exit
OK:
      mov dx,offset MsgOK

Exit:
      mov ah,9
      int 21h
      MOV Ah,4CH
      INT 21H

MsgInputDisk  db 0dh,0ah,"Please input your driver letter:$"
MsgInputSN    db 0dh,0ah,"Please input your new Disk Serial Number(as XXXXXXXX):"
MsgAccessError db 0dh,0ah,"Get(Or Set) Disk SN Error!$"
MsgErrorInput  db 0dh,0ah,"Input Error, please input a char within 'a' and 'z'! and must be 8 bytes HEX chars!$"
MsgOK          db 0dh,0ah,"Your Disk SN Successfully changed!$"
MsgDiskSN      db 0dh,0ah,"Your OLD disk serial number is:"
lpSerialNum    db 8 dup (0),0dh,0ah,24h
InputBuffer    db 80,8
InputedDiskSN  label byte
org offset InputBuffer+90h
DiskInfo  label byte
org offset DiskInfo+2
LongDiskSN    label byte
CSEG ends
      END START
运行此程序后,屏幕上出现很多乱码,输入serialnum,如:091a2231,或23c30f28,则会分别将093a2231,23c32f28写入,即第4位和第6为如果不为数字,而是字母,则第3位和第5未分别加2。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 387
活跃值: (216)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
厉害利害,我改不出来,看不懂
2004-10-6 11:14
0
游客
登录 | 注册 方可回帖
返回
//