阿西吧 发表于 2017-7-20 11:48:43

汇编语言上天之路72-74(直接定址法)

72-74(直接定址法)
        标号a : db 1,2,3,4,5,6,7,8   a表示的是内存单元的地址(只能在代码段使用,不能其他段使用)
        标号b后面不加: b dw 0             a就同时描述了内存单元地址和每个单元长度

        mov ax,b = mov ax,cs:
        mov b,2 = mov word ptr cs:,2

        mov al,a = mov al,cs:0


        如果想在代码段用数据标号访问数据,则需要用伪指令assume将标号和段寄存器联系起来(否则编译器无法确定)
        c dw a,b
        相当于c dw offset a,offset b
       
        c dd a,b
        相当于c dw offset a,seg a,offset b,seg b

assumecs:code

code segment

start:
    mov ax, 0
    mov es, ax
    mov ax, 200h
    mov di, ax

    push cs
    pop ds
    mov ax, offset int7c
    mov si, ax

    mov cx, offset int7cend - offset int7c

    cld
    rep movsb

    cli
    mov ax, 0
    mov ds, ax
    mov bx, 07ch*4
    mov word ptr ds:, 200h
    mov word ptr ds:, 0
    sti

    mov ax, 4c00h
    int 21h

int7c:
    jmp short int7ccode
    table dw sub1-int7c+200h, sub2-int7c+200h

int7ccode:
    push ax
    push bx

    cmp ah, 1
    ja int7c_ok
    sub bx, bx
    mov bl, ah

    add bx, bx
    push cs
    pop ds
    call word ptr

int7cok:
    pop bx
    pop ax

    iret

    ; clear screen
sub1:
    push bx
    push cx
    push es

    mov bx, 0b800h
    mov es, bx
    mov bx, 0
    mov cx, 2000

sub1s:
    mov byte ptr es:, ' '
    add bx, 2
    loop sub1s

    pop es
    pop cx
    pop bx

    ret

    ; change text color

sub2:
    push bx
    push cx
    push es

    mov bx, 0b800h
    mov es, bx
    mov bx, 1
    mov cx, 2000

sub2s:
    and byte ptr es:, 11111000b
    or byte ptr es:, al
    add bx, 2
    loop sub2s

    pop es
    pop cx
    pop bx

    ret
suberror:


    ret

int7cend:
    nop
code ends

end start
页: [1]
查看完整版本: 汇编语言上天之路72-74(直接定址法)