📄 sy95.asm.txt
字号:
data segment
str db 2 dup (?) ;定义一个str数组存放每次要输出的16进制数的ASCII码值
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data ;装入数据段段地址
mov ds,ax
mov ax,0000h ;装如附加段的段地址
mov es,ax
mov si,0000h ;置si为每次取出内存0000:0000地址单元数据的指针
mov bx,0000h ;置bx为计数寄存器,共要取出100个数
zp:
inc bx ;计数器加1,对一个存储单元的数操作开始
mov al,es:[si] ;取出一个字节的内容给al
mov cl,4 ;置cl 为4,为移位 做准备
mov dl,al ;先把al中的数放入dl保存
and dl,0fh ;取出低四位
mov str[1],dl ;将取出的低四位放入str中保存
shr al,cl ;al右移四位
and al,0fh ;取出这次操作的存储单元的高四位
mov str[0],al ;将高四位放入str,还是本着高高低低的原则
;下面是对取出来字节的对应十进制数值转化成对应16进制数ASCII码的处理并输出
mov di,offset str
mov cx,2
l1:
mov dl,byte ptr [di]
cmp dl,0ah
jb next
add dl,7h
next:
add dl,30h
mov byte ptr [di],dl
mov dl,byte ptr [di] ;求得对应的16进制ASCII码后将其送入dl,直接输出
mov ah,2
int 21h
inc di ;修改di的值,将str的偏移地址加1
loop l1 ;若cx不为0则继续处理
;输出空格
mov ah,2
mov dl,20h ;将空格的ASCII码值送入dl,准备输出
int 21h
mov ax,bx ;先把bx计数值送入ax保存
and ax,000fh ;判断bx中的个数是否能被16整除
jnz l2 ;不能被16整除时则跳转到l2
;下面时输出回车换行,也就是当满足被16整除时输出回车换行
mov ah,02
mov dl,13 ;将回车的ASCII 码值送入dl,为输出作准备
int 21h
mov ah,02
mov dl,10 ;将换行的ASCII 码值送入dl,为输出作准备
int 21h
l2:
inc si ;指针si 加1,为处理下个字节数据作准备
cmp bx,100 ;判断操作数据个数是否到了100个
jnz zp ;小于100则继续处理
;处理完100个后返回dos
mov ah,4ch
int 21h
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -