汇编_27-实验10.3

1. 题目
  • 题目:数值显示
  • 功能:将 word 型数据转变为表示十进制形式的字符串, 字符串以 0 位结尾符
  • 参数:(ax)=word 型数据
    ds:si 指向字符串的首地址

2. 字符在内存中默认被保存为 16 进制
assume cs:code,ds:data,ss:stack

data segment
           dw 1234
data ends

stack segment stack
            db 128 dup(0)
stack ends

code segment
      start:
            mov ax, stack
            mov ss,ax
            mov sp,128

            mov bx,data
            mov ds,bx

            mov ax, ds:[0]
      ; -d ds:0 F
      ; 0E24:0000  D2 04 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
      ; -r
      ; AX=0E25  BX=0E24  CX=00A5  DX=0000  SP=0080  BP=0000  SI=0000  DI=0000
      ; DS=0E24  ES=0E14  SS=0E25  CS=0E2D  IP=000D   NV UP EI PL NZ NA PO NC
      ; 0E2D:000D A10000        MOV     AX,[0000]                          DS:0000=04D2
      ; -t
      ; AX=04D2  BX=0E24  CX=00A5  DX=0000  SP=0080  BP=0000  SI=0000  DI=0000
      ; DS=0E24  ES=0E14  SS=0E25  CS=0E2D  IP=0010   NV UP EI PL NZ NA PO NC

            mov ax,4c00h
            int 21h

code ends
end start
3. 10.3
assume cs:code,ds:data,ss:stack

data segment
           dw 1234,5678,65535,0
data ends

stack segment stack
            db 128 dup(0)
stack ends

code segment
      start:
                   mov  ax, stack
                   mov  ss,ax
                   mov  sp,128

                   call init_reg
                   call clean_screen
                   call show_number

                   mov  ax,4c00h
                   int  21h
      ;================================
      clean_screen:
                   mov  bx,0
                   mov  dx,0700H
                   mov  cx,2000

      clearScreen:
                   mov  es:[bx],dx
                   add  bx,2
                   loop clearScreen
                   ret
      ;=============================
      init_reg:
                   mov  bx,data
                   mov  ds,bx
                   mov  bx, 0B800H
                   mov  es,bx
                   ret
      ;=============================
      div_number:
                   push ax
                   push bx
                   push cx
                   push dx
                   push ds
                   push es
                   push si
                   push di

                   mov  ax,ds:[si]
                   mov  dx,0
                   mov  bx,10

      divNumber:
                   div  bx                     ; 32bit, dx = 余数, ax = 商
                   add  dx, 30H                ; +30H 就会变成对应的字符形式
                   mov  es:[di], dl
                   sub  di,2
                   mov  cx,ax
                   jcxz divNumberRet
                   mov  dx,0
                   jmp  divNumber

      divNumberRet:
                   pop  di
                   pop  si
                   pop  es
                   pop  ds
                   pop  dx
                   pop  cx
                   pop  bx
                   pop  ax
                   ret
      ;=============================
      show_number:
                   mov  si,0
                   mov  di, 160*10 + 40*2
                   mov  cx,4
      showNum:
                   call div_number
                   add  si,2                   ; 字形数据,每次 +2
                   add  di,160                 ; 下一行
                   loop showNum
                   ret

code ends
end start

你可能感兴趣的:(04_汇编_01,汇编)