欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

汇编:寄存器输出

程序员文章站 2024-02-01 18:44:10
...

显示8个8位通用寄存器内容(十六进制)

disprb 显示8个8位通用寄存器内容(十六进制)

	 include io.inc
    .model small
    .stack
    .data
    .code
    .startup
    ;disprb 显示8个8位通用寄存器内容(十六进制)
    mov ax,1234h
    mov bx,5678h
    mov cx,9abch
    mov dx,0def0h
    call disprb
    .exit
    end

实现disprb

    .model small
    .stack
    .data
    .code
    .startup
    ;disprb 显示8个8位通用寄存器内容(十六进制)
    mov ax,1234h
    mov bx,5678h
    mov cx,9abch
    mov dx,0def0h
    call disprb
    .exit
disprb proc
    push ax
    push bx
    push cx
    push dx
    push dx
    push dx
    push cx
    push cx
    push bx
    push bx
    push ax
    mov bl,ah
    mov dx,0304h
    call dis
    pop ax
    mov bl,al
    mov dx,090Ah
    call dis
    pop bx
    mov bl,bh
    mov dh,15
    mov dl,16
    call dis
    pop bx
    mov dh,21
    mov dl,22
    call dis
    pop cx
    mov bl,ch
    mov dh,27
    mov dl,28
    call dis
    pop cx
    mov bl,cl
    mov dh,33
    mov dl,34
    call dis
    pop dx
    mov bl,dh
    mov dh,39
    mov dl,40
    call dis
    pop dx
    mov bl,dl
    mov dh,45
    mov dl,46
    call dis
    push ds
    mov ax,cs
    mov ds,ax
    lea dx,rbmsg
    mov ah,9
    int 21h
    pop ds
    pop dx
    pop cx
    pop bx
    pop ax
    ret
dis proc ;入口参数bl,dx
    push ds
    push dx
    push bx
    and bl,0f0h
    rol bl,1
    rol bl,1
    rol bl,1
    rol bl,1
    cmp bl,10
    jb d1
    add bl,7
d1: add bl,30h
    mov ax,cs
    mov ds,ax
    xor dl,dl
    mov cl,8
    rol dx,cl
    mov si,dx
    mov rbmsg[si],bl
    pop bx
    and bl,0fh
    cmp bl,10
    jb d2
    add bl, 7
d2: add bl,30h
    pop dx
    xor dh,dh
    mov si,dx
    mov rbmsg[si],bl
    pop ds
    ret
dis endp
rbmsg db 'AH=00,AL=00,BH=00,BL=00,CH=00,CL=00,DH=00,CL=00',13,10,'$'    
disprb endp
    end

显示8个8位通用寄存器内容(十六进制)

disprw 显示8个16位通用寄存器内容(十六进制)

    include io.inc
    .model small
    .stack
    .data
    .code
    .startup
    ;disprw 显示8个16位通用寄存器内容(十六进制)
    mov ax,1234h
    mov bx,5678h
    mov cx,9abch
    mov dx,0def0h
    call disprw
    .exit
    end

实现disprw

 
    .model small
    .stack
    .data
    .code
    .startup
    ;disprw 显示8个16位通用寄存器内容(十六进制)
    mov ax,1234h
    mov bx,5678h
    mov cx,9abch
    mov dx,0def0h
    call disprw
    int 3
    .exit
disprw proc
    push ds
    push ax
    mov ax,cs
    mov ds,ax
    pop ax
    push ax
    push bx
    push cx
    push dx
    mov ttttemp,ax
    mov ax,sp
    add ax,12 ;由于前面向栈压了5个,和call 压栈ip
    push ax
    mov ax,ttttemp
    push bp
    push di
    push si
    push dx
    push cx
    push bx
    push ax
    mov dx,3
    mov cx,8
wh: pop ax
    mov bx,dx
    call dis
    add dx,9
    loop wh
    lea dx,rwmsg
    mov ah,9
    int 21h
    pop dx
    pop cx
    pop bx
    pop ax
    pop ds
    ret
dis proc ;入口参数ax
    push cx
    push si
    mov si,bx
    lea bx,rwmsg
    mov cl,4
    mov ch,4
again:rol ax,cl
    push ax
    and al,0fh
    cmp al,10
    jb d1 
    add al,7
d1: add al,30h
    mov [bx+si],al
    pop ax
    inc si
    dec ch
    cmp ch,0
    jnz again
    pop si
    pop cx 
    ret
dis endp
rwmsg db 'AX=0000  BX=0000  CX=0000  DX=0000  SI=0000  DI=0000  BP=0000  SP=0000',13,10,'$'   
ttttemp dw ?
disprw endp
    end

显示6个状态标志的状态

标记位说明:

标志名 标志为1 标志为0
OF溢出(是/否) OV NV
DF方向(减量/增量) DN UP
IF中断(允许/关闭) EI DI
SF符号(负/正) NG PL
ZF零(是/否) ZR NZ
AF辅助进位(是/否) AC NA
PF奇偶(偶/奇) PE PO
CF进位(是/否) CY NC

参考博客

disprf 显示6个状态标志的状态

    include io.inc
    .model small
    .stack
    .data
    .code
    .startup
   ;disprf 显示6个状态标志的状态
    mov ax,12
    sub ax,23
    call disprf
    .exit
    end

实现disprf

    .model small
    .stack
rfbit macro bit1,bit2
    xor bx,bx
    mov cl,bit1
    rol ax,cl
    adc bx,30h
    mov rfmsg+bit2,bl
    endm
    .data
    .code
    .startup
    ;disprf 显示6个状态标志的状态
    mov ax,12
    sub ax,23
    call disprf
    .exit
disprf proc
    push ds
    push ax
    push bx
    push cx
    push dx
    pushf
    pop ax
    rfbit 5,3	;显示OF(原来的OF需左移5位,进入当前CF)
	rfbit 4,9	;显示SF(原来的SF再左移4位,进入当前CF)
	rfbit 1,15	;显示ZF(原来的ZF再左移1位,进入当前CF)
	rfbit 2,21	;显示AF(原来的AF再左移2位,进入当前CF)
	rfbit 2,27	;显示PF(原来的PF再左移2位,进入当前CF)
	rfbit 2,33	;显示CF(原来的CF再左移2位,进入当前CF)
	mov ax,cs
	mov ds,ax
	lea dx,rfmsg
	mov ah,9
	int 21h
	pop dx
	pop cx
	pop bx
	pop ax
	pop ds
	ret
rfmsg	db 'OF=0, SF=0, ZF=0, AF=0, PF=0, CF=0',13,10,'$'    
disprf endp    
    end