高分悬赏,汇编语言高手进

2024-12-26 17:53:59
推荐回答(5个)
回答1:

1. 用DEBUG编写程序,在屏幕上显示一个字符串HELLO!,并以A.COM为文件名存盘

复制下面的文本内容,粘贴于记事本(注意:不要删除中间的空行),保存为A.TXT,然后在DOS提示符下输入:DEBUG
e10d 'HELLO!$'
a100
lea dx,[10d]
mov ah,9
int 21
mov ax,4c00
int 21

rbx
0

rcx
14

na.com

w100

q

-----------------------------------------
2. 编写完整汇编程序,将内存中10个有符号数求和。

; 下面的程序是16位汇编,编译通过,运行正确。

; Program Name: Adding.asm

Adding SEGMENT
ASSUME CS:Adding,DS:Adding
ORG 100H

Start: jmp Begin

Decimal DW 780,-370,266,48,-127,890,21,640,-1023,513 ; 10个有符号数

Deci_Sum DW ?

Begin: lea si,Decimal
cld
mov cx,9
lodsw

Adding0: add ax,[si]
inc si
inc si
loop Adding0
mov [si],ax

Exit_Proc: mov ax,4c00h ;结束程序
int 21h

Adding ENDS
END Start
-----------------------------------------
3. 编写完整程序将内存中一个无符号字节数以16进制的形式显示在屏幕上

; 下面的程序是16位汇编,编译通过,运行正确。

; Program Name: Hex_ASCII.asm

Hex_ASCII SEGMENT
ASSUME CS:Hex_ASCII,DS:Hex_ASCII
ORG 100H

Start: jmp Begin

DecimalNum db 76 ;无符号字节数

Change_Hex proc near
cmp al,9
ja Charactor
or al,30h
stosb
ret
Charactor: sub al,9
or al,40h
stosb
ret
Change_Hex endp

ChangeHex0 proc near
xor ah,ah
mov cl,4
shl ax,cl
shr al,cl
xchg ah,al
call Change_Hex
xchg ah,al
call Change_Hex
ret
ChangeHex0 endp

Begin: lea di,HeximalASC ;显示十六进制符号字符串地址
cld ;设置变址寄存器变址方向
mov al,DecimalNum
call ChangeHex0
mov al,'$'
stosb
lea dx,HeximalASC ;字符串首地址
mov ah,9 ; 显示结果
int 21h

Exit_Proc: mov ax,4c00h ;结束程序
int 21h

HeximalASC:

Hex_ASCII ENDS
END Start
-----------------------------------------
4. 编写完整汇编程序,统计内存中10个有符号数中正数的个数

; 下面的程序是16位汇编,编译通过,运行正确。

; Program Name: positive.asm

positive SEGMENT
ASSUME CS:positive,DS:positive
ORG 100H

Start: jmp Begin

Decimal DW 780,-370,266,48,-127,890,21,640,-1023,513 ; 10个有符号数

Deci_Sum DB ? ;正数的个数计数器

Begin: lea si,Decimal
cld
mov cx,10
mov Deci_Sum,0 ;计数器清零

positive0: lodsw
test ax,8000h
jz NextOne
inc Deci_Sum
NextOne: loop positive0

Exit_Proc: mov ax,4c00h ;结束程序
int 21h

positive ENDS
END Start
-----------------------------------------
5. 编写完整汇编程序,将内存中的5个无符号数从小到大排列

; Program Name: Bubbling.ASM

Bubbling SEGMENT
ASSUME CS:Bubbling,DS:Bubbling,ES:Bubbling
ORG 100H

Start: JMP Begin

Array DB -112,56,72,98,32 ;需要排序的数据
Elem_Num EQU ($-Array)/TYPE Array-1 ;外循环次数

Begin: MOV CX,Elem_Num

Scanning: PUSH CX ;入栈保存外循环次数
LEA SI,Array ;数组首地址装入源变址寄存器

Compare: PUSH SI
POP DI ;当前数组元素地址赋给目的变址寄存器,以备交换之用
LODSB ;将当前数组元素读入累加器
CMP AL,[SI] ;当前数组元素与相邻的下一个数组元素相比较
JBE NextOne ;若小于或等于,不作数据交换,处理下一个数组元素
XCHG AL,[SI] ;若大于,交换数组元素
STOSB ;保存数值较小者
NextOne: LOOP Compare ;处理下一个数组元素

POP CX ;外循环次数出栈
LOOP Scanning ;下一趟比较

Exit_Proc:MOV AX,4C00H ;结束程序
INT 21H

Bubbling ENDS
END Start
-----------------------------------------
6.编写完整汇编语言程序,将内存中一个组合BCD数以十进制显示在屏幕上。

; 下面的程序是16位汇编,以组合BCD码58为例,编译通过,运行正确。

; Program Name: BCD_Code.asm

BCD_Code SEGMENT
ASSUME CS:BCD_Code,DS:BCD_Code
ORG 100H

Start: mov cl,4
mov al,BCD_Str
xor ah,ah
shl ax,cl
shr al,cl
or ax,3030h
xchg ah,al
mov word ptr Dec_Str,ax

lea dx,Dec_Str ;字符串首地址
mov ah,9 ; 显示结果
int 21h

Exit_Proc:mov ax,4c00h ;结束程序
int 21h

BCD_Str db 58h
Dec_Str db ' $'

BCD_Code ENDS
END Start

回答2:

我只答第一题,其它的太费事了,其实第1题也很费事的,呵呵。
进入debug(下面只给出输入内容,表示回车,空格不能少,显示的内容自己看吧)
A100
MOV DX,180
MOV AH,9
INT 21
MOV AH,4C
INT 21

F180 190 "HELLO!$"
G=100 【至此完成了显示,下面再保存】

N "A.ROM"
RBX
0
RCX
100
W100
Q

现在,你可以在dos提示符下直接看到A.ROM了,如果扩展名改成.COM,还可以直接执行的。

回答3:

第1题应该是写错了。
1.用DEBUG编写程序,在屏幕上显示一个字符串HELLO!,并以A.cOM为文件名存盘,这倒好搞。

回答4:

A.ROM存盘之后你怎么实现屏幕显示?

回答5:

建议分开来问。