当前位置:编程学习 > 汇编语言 >>

汇编语言 子程序设计

补充:1.将AX中的值以十六进制形式显示。 要求:主程序利用寄存器把AX的值传送给子程序。 在子程序中将AX中的值以十六进制形式显示。 2.编写子程序,完成的功能是将DL中的2位十六进制数转换为对应ASCII码。 说明:入口参数AL=待转换的2位十六进制数 出口参数DX=转换后的ASCII码,(高字节对应高位、低字节对应低位) 举例:若AL=2AH,则DX=3241H。 0----9转换为30H----39H +30H A---F转换为41H----4FH +30H+7H
答案:数放在ax里面
    MOV AX,DATAS
    MOV DS,AX
    mov ax,0f2h
    mov cl,4
    push ax
    shl ax,cl
    cmp ah,9
    ja n1
    add ah,30h
    mov dl,ah
    mov ah,02h
    int 21h
    jmp n2
n1:
    add ah,37h
    mov dl,ah
    mov ah,02h
    int 21h
n2:
    pop ax
    and al,0fh
    cmp al,9
    ja n3
    add al,30h
    mov dl,al
    mov ah,02h
    int 21h
    jmp n4
n3:
    add al,37h
    mov dl,al
    mov ah,02h
    int 21h
n4:
    mov ah,4ch
    int 21h
其他:厄,你想问什么了,汇编子程序就是在前面加一个识别符,如loop: 已知一个字符串存放在TEXT开始的连续单元中,另有一个子字符串存放在STRING开始的连续单元中,两个字符串均以$结束.编制程序,统计STRING开始的字符串在TEXT 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
;------------------------------ 

上一个:用“汇编语言”编单片机程序教程,求下载地址,急急
下一个:C语言的指针如何进入嵌入的汇编语言?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,