回 帖 发 新 帖 刷新版面

主题:急寻高手,求解加分,谢谢

中断向量表的操作
要求:该程序首先访问中断向量表,然后能自动建立一文件,将中断向量表的内容保存到文件中(文件名为INTHAND.TXT等),并将中断向量表的个各中断入口以十六进制形式显示在屏幕上(如:01#:——每行显示4个)[em18]

回复列表 (共6个回复)

沙发

要读出中断向量表所指向的内容不难,问题是怎么知道指向内容的长度,也就是什么说该内容什么时候结束返回。当然,你想读足够长,自己在DEBUG的话,我倒是可以尝试一下。

板凳


;2005-12-16 14:48:13
;中断向量表的操作
;要求:该程序首先访问中断向量表,然后能自动建立一文件,
;将中断向量表的内容保存到文件中(文件名为INTHAND.TXT等),
;并将中断向量表的个各中断入口以十六进制形式显示在屏幕上
;(如:01#:——每行显示4个)

.model small

.stack
.data
strOutputFileName    db    'INTHAND.TXT', 0
strBuff    db    4 dup (?), '$', '$'

.code
_main:
mov        ax, @data
mov        ds, ax

;create file
mov        dx, offset strOutputFileName
xor        cx, cx
mov        ah, 3CH
int        21H
jc        _error_create_file
push    ax
;write file
mov        bx, ax        ;bx = file handle
push    ds;save ds register
xor        ax, ax
mov        ds, ax        ;ds = 0
mov        cx, 256 * 4    ;cx = 1024 Byte
mov        ah, 40H
int        21H
pop        ds
jc        _error_write_file
;close    handle
pop        bx
mov        ah, 3EH
int        21H
jc        _error_close_file

cld
xor        ax, ax
mov        es, ax
xor        di, di
xor        cx, cx        ;中断号

mov        si, offset strBuff
mov        bx, 4
_@@1:
push    cx

mov        ax, cx
mov        dx, si
mov        cl, 1
call    BinToHexString
mov        byte ptr [si + 2], '#'
mov        byte ptr [si + 3], ':'
mov        byte ptr [si + 4], '$'
mov        dx, si
mov        ah, 9
int        21H

mov        ax, [di + 0]    ;ip
mov        dx, si
xor        cl, cl
call    BinToHexString
mov        dx, si
mov        ah, 9
int        21H

mov        dl, '-'
mov        ah, 2
int        21H

mov        ax, [di + 2]    ;cs
mov        dx, si
xor        cl, cl
call    BinToHexString
mov        dx, si
mov        ah, 9
int        21H

dec        bx
jnz        _@@2
mov        bx, 4
mov        dl, 0DH
mov        ah, 2
int        21H
mov        dl, 0AH
mov        ah, 2
int        21H
jmp        _@@3
_@@2:
mov        dl, 9    ;TAB
mov        ah, 2
int        21H
_@@3:
add        di, 4
pop        cx
inc        cl
jnz        _@@1

_error_create_file:
_error_write_file:
_error_close_file:

mov        ax, 4C00H
int        21H
; ****************************
; 机器数转换为 16 进制字符串
; AX = 要转换的数
; CL = 要输出的形式
; CL = 0 输出 AX
; CL = 1 输出 AL
; DS:DX = 输出字符串
; ****************************
BinToHexString    proc
push    si

mov        si, dx
mov        dl, 4
test    cl, cl
jz        _@BinToHexString_0
mov        ah, al
mov        dl, 2
_@BinToHexString_0:
mov        cl, 4
_@BinToHexString_1:
rol        ax, cl
mov        dh, al
and        al, 0FH
add        al, '0'
cmp        al, '9'
jna        _@BinToHexString_2
add        al, 7
_@BinToHexString_2:
mov        [si], al
inc        si
mov        al, dh
dec        dl
jnz        _@BinToHexString_1
mov        byte ptr [si], '$'
pop        si
ret
BinToHexString    endp
end    _main

3 楼

不知理解正确没有,还有我只进行了简单的数据核对.

4 楼

erping 上次的那个题你的做法不对,就是下面这个
余玄函数的设计
具体要求:
   (1)保存0-90度(间隔1度的余玄函数值(至少保留2-4位小数))
   (2)从键盘输入的角度值后在屏幕上输出其对应的函数值
应该将1分成90分然后用1减去输入度数与分好份的书相乘的结果
但是小弟还是没法自己编出,  汗!!!!!!!!!!!
请再次出手相助

5 楼

对不起,我实在无能为力了,我的数学只有初中水平,实在不懂

6 楼

多谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册