实验10.3
Tutorial: 汇编基础
Category: C语言
Published: 2026-04-07 13:58:26
Views: 20
Likes: 0
Comments: 0
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