首页 > 代码库 > 汇编实验12

汇编实验12

assume cs:codesg
codesg segment
    start:
        ; 设置源地址与目的地址,并使用movsb传送
        mov ax, cs
        mov ds, ax
        mov si, offset do0
        mov ax, 0
        mov es, ax
        mov di, 200h
        mov cx, offset do0_end - offset do0
        cld
        rep movsb
        
        ;  设置向量表
        mov ax, 0
        mov es, ax
        mov word ptr es:[0], 200h
        mov word ptr es:[2], 0
        
        ;    激发一个除法溢出,后来证明其它程序有除法溢出时也会打印do0里的字符串,说明内存中的数据被改变。
        ;    重启电脑后无效,说明中断程序重新加载,疑问,加载的源程序信息在哪???继续学习之路吧
        mov ax, 1000
        mov bl, 1
        div bl
        
        mov ax, 4c00h
        int 21h
        
    do0:
        jmp short do0_start
        db ‘divide error!‘   ; 13个字符
    do0_start:
        mov ax, cs
        mov ds, ax
        mov bx, 202h        ;  do0 最前面的jmp指令长度忘了,打印出来开始两个字符是乱码,貌似有$符
        mov cx, 13
        
        mov ax, 0b800h
        mov es, ax
        mov di, 12*160+5*2    ;  12行,第5列,1 颜色不设置看会输出什么,结果黑底白色
        mov ah, 24h
    loop_do0:
        mov al, [bx]
        mov es:[di], ax
        inc bx
        add di, 2
        loop loop_do0

        mov ax, 4c00h
        int 21h
    do0_end:
        nop
    
codesg ends
end start