汇编:寄存器输出
程序员文章站
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