汇编语言--微机原理-课后题

2025-03-04 06:06:12
推荐回答(1个)
回答1:

问题一:
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
bufX db 56
bufY db -29
bufZ db ?
Start: push cs
pop ds ;使数据段与代码段同段
mov ah,bufX
mov al,bufY
cmp ah,al
jge $+4
xchg ah,al
mov bufZ,ah
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束

问题二:
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; ---------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; ---------------------------------------
; 功能:输出回车换行
Output_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF endp
; ---------------------------------------
; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
; 入口:AX=二进制数
; 出口:在当前光标位置显示转换后的ASCII码数字
Dec_ASCII Proc Near
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[6]
mov byte ptr [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 7 dup(?)
Dec_ASCII EndP
; ---------------------------------------
Prompt_Key db 'Please press a key:$'
Prompt_ASC db 8 dup(20h),"The key's ASCII is:$"
Start: push cs
pop ds ;使数据段与代码段同段
@@Press_Key:Output Prompt_Key ;提示按下一个键
mov ah,1 ;接收键盘按下一个键
int 21h
cmp al,27 ;Esc?
jz Exit_Proc ;结束程序
push ax
Output Prompt_ASC
pop ax
xor ah,ah
call Dec_ASCII ;把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
call Output_CTLF ;输出一个回车、换行
jmp @@Press_Key
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束