|
发表于 2017-4-7 15:57:15
|
显示全部楼层
本楼为最佳答案
- assume cs:code, ss:stack
- stack segment
- db 100 dup(?)
- stack ends
- code segment
- ;显示十六进制数到屏幕
- ;void show_hex(word data);
- show_hex:
- push bp
- mov bp, sp
- ;sub sp, 10h
-
- push ax
- push cx
- push bx
- push dx
-
- mov ax, 0b800h
- mov es, ax
- xor si, si ;es:si -> 当前显示位置
-
- mov ax, [bp + 4] ;mov ax, data
-
-
- mov cx, 4
- show_hex_s:
- mov bx, ax
- and bx, 0f000h
-
- push cx
- mov cl, 12
- shr bx, cl
- pop cx
-
- cmp bx, 0ah
- jl show_hex_less_a
-
- sub bx, 0ah
- add bx, 'A'
- jmp show_hex_less_n
-
- show_hex_less_a:
- add bx, '0'
- show_hex_less_n:
- push ax
-
- ;输出bl中的字符
- mov ah, 0eh
- mov al, bl
- int 10h
-
- pop ax
-
-
- push cx
- mov cl, 4
- shl ax, cl
- pop cx
- loop show_hex_s
-
-
- pop dx
- pop bx
- pop cx
- pop ax
-
- mov sp, bp
- pop bp
- ret
- start:
- mov ax, stack
- mov ss, ax
- mov sp, 100
-
- mov cx, 0ffffh
- s:
- ;显示cx中的值
- push cx
- call show_hex
- add sp, 2
-
- ;输出空格
- push ax
- mov ah, 0eh
- mov al, ' '
- int 10h
-
- loop s
-
- mov ax,4c00h
- int 21h
- code ends
- end start
复制代码 |
|