建材秒知道
登录
建材号 > 设计 > 正文

汇编语言程序设计实例

愉快的面包
俭朴的草莓
2023-02-27 05:39:54

汇编语言程序设计实例

最佳答案
洁净的面包
复杂的斑马
2025-08-18 07:19:04

第一题:mov cl,0

mov ch,17

next:dec ch

je exit

mov bx,0

shl ax,1

rol bx,1

cmp bx,0

jz next

inc cl

jmp next

exit:mov ah,4ch

int 21h

第二题:

mov cx,10

mov si,offset buffer

next:mov bx,word ptr[si]

inc bx

mov word ptr[si],bx

inc si

inc si

loop exit

jmp next

exit: mov ah,4ch

int 21h

最新回答
认真的橘子
尊敬的曲奇
2025-08-18 07:19:04

你的问题问的不对,寄存机 AX BX CX DX就是具体的数据,你可以把这些当成变量使用

a,b,c,d在程序中是分配的内存空间,和寄存器存在着本质上的区别,所以这些题目使用的数据就是:AX,BX,CX,DX这些寄存器数据

1、交换可以用堆栈进行,

AX。BX相互交换内容

PUSH AX

PUSH BX

POP AX

POP BX

这样AX和BX内容就交换了

2、

为了方便你理解,写一些不正确的表达式吧

MOV AX,0相当于 int a=0

XOR AX,AX XOR这个指令,如果后面两个数相同,则为0,并将0存放到第一个寄存器AX中

SUB AX,AX 相当于 int a=1 a=a-a所以结果也是0

AND AX,0AND指令,将后面两个数据按位‘与’操作,只要有一个数为0,结果就为0,所以AX的结果就是0了。

第三题看不懂什么意思,想问什么东西?

4、

内存复制的代码:

mov si,offset setscreen原数据偏移地址

mov di,0目标偏移地址

mov cx,offset setscreen_end-offset setscreen 计算出数据长度

cld di,si每次执行movsb的时候都递增1

rep movsb 开始复制

清零:

如果数据段有一块内存需要清零

mov cx,100 //数据段长度

mov si,0//开始地址

mov al,0

_start:

mov byte ptr ds:[si],al

dec cx

inc si // 指向下一个字节

cmp cx,0

jnz _start //如果cx不为0事继续清空下一个内存

百度【幽灵代码论坛】加入我们一起学习

微笑的太阳
知性的宝马
2025-08-18 07:19:04
1.将AX中的值以十六进制形式显示。

要求:主程序利用寄存器把AX的值传送给子程序。

在子程序中将AX中的值以十六进制形式显示。

=====================================

DATA SEGMENT

D1 DW 13276 数: 0~65535

DATA ENDS

------------------------------

CODE SEGMENT

ASSUME CS:CODE, DS:DATA

START:

MOV AX, DATA

MOV DS, AX

------------------------------

MOV AX, D1取来数字.

CALL DISP_AX

MOV DL, 'H'

MOV AH, 2

INT 21H 输出H

------------------------------

MOV AH, 4CH

INT 21H 返回DOS

------------------------------

DISP_AX:

MOV BX, 1616进制,要除16

MOV CX, 4 求4位16进制数.

ABC:

CWD将AX扩展到DX

DIV BX

PUSH DX保存余数到堆栈.

LOOP ABC

MOV CX, 4 显示4位.

ASD:

POP DX

CMP DL, 10

JB A48

ADD DL, 7

A48:

ADD DL, 48

MOV AH, 2

INT 21H 输出.

LOOP ASD

RET

------------------------------

CODE ENDS

END START

===========================

2.编写子程序,完成的功能是将DL中的2位十六进制数转换为对应ASCII码。

说明:入口参数AL=待转换的2位十六进制数

出口参数DX=转换后的ASCII码,(高字节对应高位、低字节对应低位)

举例:若AL=2AH,则DX=3241H。

0----9转换为30H----39H +30H

A---F转换为41H----4FH +30H+7H

------------------------------

AL_ASC_DX:

MOV AH, 0 要除16

MOV CL, 16求16进制数.

DIV CL

CMP AL, 10

JB A48

ADD AL, 7

A48:

ADD AL, 48

MOV DH, AL

CMP AH, 10

JB A482

ADD AH, 7

A482:

ADD AH, 48

MOV DL, AH

RET

------------------------------

典雅的泥猴桃
大方的发卡
2025-08-18 07:19:04
ASSUME CS:CODE

CODE SEGMENT

STR DB '01268ACE'

START:

MOV AH, 7

INT 21H

CMP AL, '0'

JBIN_X

CMP AL, '7'

JAIN_X

MOV DL, AL

MOV AH, 2

INT 21H

AND DL, 15

MOV BL, DL

MOV BH, 0

MOV DL, CS:STR[BX]

INT 21H

MOV AH, 4CH

INT 21H

CODE ENDS

END START

大气的蛋挞
饱满的高山
2025-08-18 07:19:04
从你的问题来看,你还没有把软件与硬件关联起来,所有的指令在计算机内都被译码器变成了一系列不同时序的高低电平的关系,通过这些高低电平可以做很多事,最简单的可以用单片机一个引脚输出高电平或低电平驱动一台电动机,也可以通过某个I/O口输入是高还是低电平来判断有没有键按下之类的。计算机指令越丰富功能就越强,现在计算机的CPU功能当然越来越多,指令也越来越丰富,从586MMX开始就有与多媒体有关的指令了,而51单片机硬件设计是功能就限制住了,也就有111条指令。