汇编语言 子程序设计

汇编语言 子程序设计,第1张

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, 16 ;16进制,要除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

;------------------------------

楼主啊,要慷慨一点,15分太低了,难怪都没人回答你。你百度搜一下,这种题几百分的。下面的程序是修改其他地方的:

stack segment stack 'stack'

dw 32 dup()

stack ends

data segment

BCD1 DB 'Please input number A:$'

BCD2 DB 'Please input number B:$'

BCD3 DB 'The sum of A and B is :$'

N1 DB 7,0,7 DUP(0)

N2 DB 7,0,7 DUP(0)

OBUF DB 9 DUP(0)

data ends

code segment

begin proc far

assume ss:stack, cs:code,ds:data

push ds

sub ax,ax

push ax

mov ax,data

mov ds,ax

MOV DX,OFFSET BCD1

MOV AH,9

INT 21H

MOV DX,OFFSET N1

MOV AH,10

INT 21H

MOV DL,0AH

MOV AH,2

INT 21H

MOV DX,OFFSET BCD2

MOV AH,9

INT 21H

MOV DX,OFFSET N2

MOV AH,10

INT 21H

MOV DL,0AH

MOV AH,2

INT 21H

MOV DX,OFFSET BCD3

MOV AH,9

INT 21H

MOV DL,0AH

MOV AH,2

INT 21H

XOR AX,AX

MOV BL,N1+1

MOV BH,0

MOV CX,BX

MOV OBUF[BX+1],'$'

AG: MOV AL,N1[BX+1]

ADC AL,N2[BX+1]

AAA

PUSHF

ADD AL,30H

MOV OBUF[BX],AL

DEC BX

POPF

LOOP AG

adc obuf,0

add obuf,30h

MOV DX,OFFSET OBUF

MOV AH,9

INT 21H

ret

begin endp

code ends

end begin

最近在复习汇编,顺便找些练练,上面的答案确实是6位10进制加法,也有进位,但是,它要求位数必须相等,这样就不太好了,多加几十行代码可以改好,让它实现任意位数的加法,对两个加数的位数没有限制,代码我就不贴了,你自己改吧。

跑马灯程序用汇编是很好实现的,只要用好循环移位指令就可以,以下是程序。

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:

MOV A,#0FEH

LOOP:

MOV P1,A ;将控制字送端口

RL A ;控制字循环左移

LCALL DELAY ;延时

SJMP LOOP

DELAY: ;延时大概1秒

MOV R2,#10

DLY1:

MOV R3,#200

DLY2:

MOV R4,#250

DJNZ R4,$

DJNZ R3,DLY2

DJNZ R2,DLY1

RET

END

以上就是关于汇编语言 子程序设计全部的内容,包括:汇编语言 子程序设计、用汇编语言编写一段程序、用汇编语言编写跑马灯程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9440458.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存