汇编语言高手进

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-30
★汇编语言高手进

; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。
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
; -------------------------------------
STRING db 'The data is FEB&03'
Lenth_Str equ $-STRING
Press_Key db 7,13,10,13,10,'The complated. Press any key to exit...$'
; -------------------------------------
Start: push cs
pop ds
lea si,STRING ;字符串地址
mov cx,Lenth_Str ;字符个数
@@Replace: cmp BYTE ptr [si],'&' ;'&'?
jnz $+5 ;不是,跳过
mov BYTE ptr [si],20h ;用空格替换
inc si
loop @@Replace
; -------------------------------------
Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序
mov ah,1
int 21h
mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束

data segment
list db 02h,90h,99h,34h,74h,82h,81h,04h,97h,28h
max db ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov cx,10
lea si,list
mov bl,[si]
b:cmp bl,[si+1]
jna n
inc si
loop b
z:lea di,max
mov [di],bl
int 3h
n:xchg bl,[si+1]
inc si
loop b
jmp z
code ends
end start

总结:执行完成后数据段的数据为
BUF DB '5792'
BCD DB 5,7,9,2

添加了注释的代码如下

;有个名为BUF的数组,保存了一串字符。
;现要求将它的每个字符转换为对应的BCD码,并保存到名为BCD的数组中
DATA SEGMENT
BUF DB '5792'
BCD DB 4 DUP(?)
DATA ENDS

STACK SEGMENT
DB 200 DUP(0)
STACK ENDS

CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START:
MOV AX,DATA
MOV DS,AX ;数据段地址给DX

MOV CX,4 ;循环次数送CX
LEA SI,BUF ;SI保存数组BUF的首地址
LEA DI,BCD+3 ;DI保存数组BCD的末地址

LOOP1:
MOV AL,[SI] ;取出一个字符,(AL)=(DS:SI)
AND AL,0FH ;AL高4位清零,保留低4位
MOV [DI],AL ;保存操作结果,(DS:DI)=(AL)
INC SI ;修改指针,令SI指向数组BUF的下一个字节
DEC DI ;令DI指向数组BCD的前一个字节

DEC CX ;循环控制数减1
JNZ LOOP1 ;判断是否结束循环

MOV AH,4CH
INT 21H
CODE ENDS
END START

  • 汇编语言的高手请进,问几个简单题目
    答:1 XOR AL,AL INC AL NEG AL INC AL MOV BL,7FH ADC AL,BL 答:上述程序运行后,AL=80H,CF=0 2 下面程序段是判断寄存器AH和AL中第3位是否相同,如相同,AH置0,否则AH置非0。试把空白处填上适当的指令(一个空白只填一条指令)。答: xor ah,al AND AH,08H jz ZERO...
  • 汇编高手请进。关于以下题目的代码(汇编语言的)。
    答:;宏定义1 ;功能:把字符串中的大写改为小写.;入口:字符串起始地址为STR_ADDR ; 字符串是以0结尾.D2X MACRO STR_ADDR LEA SI, STR_ADDR LP1:MOV AL, [SI]CMP AL, 0 JE FINI CMP AL, 'A'JB NEXT CMP AL, 'Z'JA NEXT ADD AL, 20H MOV [SI], AL NEXT:...
  • 汇编语言高手进,求程序每一步的意思!,尤其是一开始我知道MOV AX,DATA是...
    答:个人理解:这个AX在这里起到的是一个间接变量的作用。传递DATA的值。DS值改变后,AX里的值依然是DATA的值,当你下次需要用到DATA的值的时候可以直接用AX赋。很多程序都是这样的。
  • 汇编语言高手请进
    答:START: NOP ;空指令(MCU上电时不稳定,一般会在复位地址 ;加NOP指令,防止程序跑非)MOV R3,#3 ;LOP2: MOV R4,#8 MOV R2,#0 LOP1: MOV P1,#0FFH ;设置P1口为全高(P1口应该是与LED的阳极相连 ;的)MOV DPTR,#TABA ;<查表(R2为相对偏移指针,P3口与LED阴极相连 MOV A,R2 ...
  • 汇编语言高手帮帮忙 解决下菜鸟问题
    答:命题:从1开始,连续 n 项奇数等差数列求和,可以得到 n^2。证明:1 + 3 + 5 + ... + (2n-1) = (1 + (2n-1))*(n/2) = n^2 求解思路:从完全平方数 N 中,依次减去:1、3、5、...,减到0为止,减去了多少次?平方根就是几。程序的核心部分如下:MOV AX, [data] ...
  • 高手请进,问汇编语言程序设计问题
    答:分类: 电脑/网络 >> 程序设计 >> 其他编程语言 问题描述:31. MOV DL,AL NOT DL TEST DL,04H JE NEXT ┇ NEXT:…若上述程序段执行时产生分支,说明AL中的数第几位一定为1?程序段执行后CF是多少?32.DA1 DB‘ABCDEFGHI’DA2 DB 9 DUP(0)┇ LEA SI,DA1 LEA DI,DA2 MOV CX,...
  • 高分悬赏,汇编语言高手进
    答: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 Be...
  • 汇编高手进 用汇编语言对4位10进制数加密。密码是0123456789对应为908...
    答:DATA SEGMENT TABLE DB 39H,30H,38H,32H,37H,34H,36H,33H,31H,35H;密码表 RESULT DB 4 DUP(?);四位十进制数对应的密码 DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX LEA BX,TABLE LEA DI,RESULT MOV AX,1234;已知的四位十...
  • 汇编语言编程 高手请进
    答:INLOOP:IN AL,41H TEST AL,01H JZ INLOOP IN AL,40H AND AL,0FH;ASCII十进制(BCD)ADD BL,AL LOOP INLOOP;共输入20个 MOV AL,BL;累加和®AL MOV AH,0 MOV BL,100 DIV BL;AX¸BL;商®AL,余数®AH MOV NBCDH,AL;存百位数 MOV ...
  • 汇编高手进。。。在线等,高分。急!
    答:虽然没编过32位汇编语言程序,却也见过一点,稍有理解。下面我搞的程序,不是完整的,是针对所提问题的关键部分。应该有99%的把握,剩下的1%,当是疏忽。; --- ; 定义宏指令mData,传递参数 time,将其存储的日期以“年/月/日"的格式显示在屏幕上 ; 说明:这部分按16位模式编程 mData MACR...