当前位置:百问十四>百科问答>用汇编语言编写8139网卡驱动

用汇编语言编写8139网卡驱动

2024-08-02 04:58:25 编辑:join 浏览量:557

用汇编语言编写8139网卡驱动

assume cs:code,ds:data

data segment

OUTPUT db '1*1+2*2+......+N*N=','$'

TIME dw 0AH ;0AH(十六进制) = 10(十进制) 这里可以随便调整,比如将0AH 写成 0BH

;就能算1*1+2*2+。。。。。。11*11的值哦

TEN dw 0AH

data ends

code segment

start:

mov ax,data

mov ds,ax

;将用户输入的值赋值给cx,循环次数

mov cx,TIME

mov bx,0

next: mov al,cl

mul al

add bx,ax

dec cl

jnz next

;调用DOS系统9号调用,实现字符串的输出

;9号调用的功能:在屏幕上输出指定的字符串.该字符串要求在数据

;段DS中定义,字符串的偏移地址存放在DX寄存器中,且字符串必须以'$'

;作为结束标志.字符'$'不输出,只是作为字符串的结束标志

lea dx,OUTPUT ;取OUTPUT的偏移地址 lea指令的作用是取偏移地址

mov ah,9

int 21h

;将结果以10进制的方式输出

mov ax,bx

mov bx,0

;十进制数字(0~9)对应的ASCII码 = 十进制数字(0~9)+30H

result: mov dx,0

div TEN ;除以10

add dl,30h ;余数

mov cx,ax ;商

;dx入栈,因为上面的bx(得数)/10只是得到被除数的最后一位(例如385的5,38的8,3的3)

;最后的出来的数字的顺序是583 而我们的答案是385,所以要用到栈

;因为栈是后进先出的 即583进入栈后,出栈时是385

push dx

;bx是为result1的循环次数准备的,因为我不确定result1的循环次数

;即不知道dx要入栈多少次,只有确定bx才能知道入栈多少,才可以

;知道出栈的次数

inc bx

;检查cx是否为0,如果是跳到result1处

jcxz result1

;若没有跳到result1出,说明cx不为0,即被除数还没有除尽,还要继续运算

jmp short result

;调用DOS系统2号调用,实现在屏幕显示一个字符

;2号调用的功能:将dl寄存器的字符送到显示器显示

result1: pop dx

mov ah,2

int 21h

mov cx,bx ;入栈的次数给cx,以确定出栈多少次

dec bx

loop result1

result2:

mov ax,4c00h

int 21h

code ends

end start

LZ如果有不明白,可以追问

标签:网卡,汇编语言

版权声明:文章由 百问十四 整理收集,来源于互联网或者用户投稿,如有侵权,请联系我们,我们会立即处理。如转载请保留本文链接:https://www.baiwen14.com/answer/219509.html
热门文章