⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sy94.asm

📁 将数据以16进制形式输出
💻 ASM
字号:
data segment
   value2 dw 4811
   str db 4 dup (30h),13,10 ;定义一个str数组存放要输出的16进制字符串,后面加回车换行
data ends
code segment
  assume cs:code,ds:data
start:
      mov ax,data
      mov ds,ax              ;装入段地址

      ;下面依据value2在内存中是以补码形式存放的特点,四位一组取出对应的十进制值给str
      mov ax,value2          ;取出value2的值给ax
      mov bx,offset str+4-1  ;取出str的第四个元素偏移地址给bx
      mov cl,4               ;因为后面要右移四位,所以将4赋值给cl
again:
      mov dx,ax              ;后面要改变ax的值,所以先送入dx保存
      and dl,0fh             ;相与取出dx中的最低四位,即一个16进制数
      mov byte ptr [bx],dl   ;将取出的数送入str保存
      shr ax,cl              ;逻辑右移为下次取一个16进制数做准备
      dec bx                 ;因为是从低位向高位取,bx减1,按照存储器的高高低低原则
      cmp ax,00              ;判断ax是否为0,
      jnz again              ;不为0继续取有效位

      ;下面是将取到的每一位十进制数转化成对应十六进制数的ASCII码
      mov bx,offset str      ;取要转化的字符串的偏移地址
      mov cx,4               ;对应四个16进制数的ASCII码
l:
      mov dl,byte ptr [bx]   ;取出一个对应的十进制数值给dl进行处理
      cmp dl,0ah             ;与10比较判断
      jb next                ;当小于10时转移到next
      add dl,7h              ;否则dl中的值加7
next:
      add dl,30h             ;给dl中的值加30h
      mov byte ptr [bx],dl   ;将得到的对应16进制数的ASCII码再送入str数组保存,为输出作准备
      inc bx                 ;str的偏移地址加1
      loop l                 ;cx不为0继续循环处理

      ;下面是真正输出value2对应的16进制字符串形式
      mov cx,6
      mov bx,offset str
pp:
      mov dl,byte ptr [bx]
      mov ah,2
      int 21h
      inc bx
      loop pp
      ;输出结束,返回dos
      mov ah,4ch
      int 21h
code ends
     end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -