一个汇编程序题,高手来

作者&投稿:旗姜 (若有异议请与网页底部的电邮联系)
一道汇编程序题~

MOV BX,0024H ;BX=0024H
LEA BX,[BX] ;BX=0024H(取0024的地址,还是0024)
OR BX,0 ;BX=0024H(零的或运算,结果不变,但CF=0)
ADC BX,[BX] ;CF+0024H+2856H=287AH
结果:
BX=287AH
CF=0 ;没有进位发生
OF=0 ;没有溢出发生

MOV AX,1234H ;将1234赋给AX,AH=12H,AL=34H,下同
MOV BX,5678H
ADD AL,BL ;AL=AL+BL
DAA ;十进制调整,说明上句当成十进制来加,结果为34H+78H=12H
MOV CL,AL CL=12H
MOV AL,AH AL=12H
ADC AL,BH AL=12H+56H+1
DAA ;十进制调整,结果为69H

最后的结果AL=69H,CL=12H

DSEG SEGMENT
BUF0 DB 'INPUT AGAIN PLEASE!',0AH,0DH,'$'
M DB ?
N DB ?
FLAG DB ?
BUF DB ?
DSEG ENDS
CSEG SEGMENT
ASSUME DS:DSEG,CS:CSEG
START: MOV AX,DSEG
MOV DS,AX
;
BEGIN: MOV N,0
LEA SI,BUF
NEXT: MOV AH,1
INT 21H
CMP AL,'='
JZ EA
MOV [SI],AL
INC SI
INC N
JMP NEXT
EA: DEC N
CMP BYTE PTR[SI-1],'Q'
JNZ EC
LEA DI,BUF
EB: CMP BYTE PTR[DI],'Q'
JZ P1
CMP BYTE PTR[DI],30H
JB EI
CMP BYTE PTR[DI],37H
JA EI
INC DI
JMP EB
P1: CALL SUB1
JMP OK
EC: CMP BYTE PTR[SI-1],'B'
JNZ EE
LEA DI,BUF
ED: CMP BYTE PTR[DI],'B'
JZ P2
CMP BYTE PTR[DI],30H
JB EI
CMP BYTE PTR[DI],31H
JA EI
INC DI
JMP ED
P2: CALL SUB2
JMP OK
EE: CMP BYTE PTR[SI-1],'D'
JNZ EG
LEA DI,BUF
EF: CMP BYTE PTR[DI],'D'
JZ P3
CMP BYTE PTR[DI],30H
JB EI
CMP BYTE PTR[DI],39H
JA EI
INC DI
JMP EF
P3: CALL SUB3
JMP OK
EG: CMP BYTE PTR[SI-1],'H'
JNZ EI
LEA DI,BUF
EH: CMP BYTE PTR[DI],'H'
JZ P4
CMP BYTE PTR[DI],30H
JB EI
CMP BYTE PTR[DI],39H
JBE WW
CMP BYTE PTR[DI],'A'
JB EI
CMP BYTE PTR[DI],'F'
JA EI
WW: INC DI
JMP EH
P4: CALL SUB4
JMP OK
EI: LEA DX,BUF0
MOV AH,9
INT 21H
JMP BEGIN
OK: MOV AH,4CH
INT 21H
;
SUB1 PROC
LEA DI,BUF
CMP N,3
JA EI
JB MA
MOV AL,[DI]
AND AL,0FH
CMP AL,3
JBE QQ
JMP EI
QQ: MOV CL,6
SHL AL,CL
MOV BL,[DI+1]
AND BL,0FH
MOV CL,3
SHL BL,CL
OR AL,BL
MOV BL,[DI+2]
AND BL,0FH
OR BL,AL
JMP MC
MA: CMP N,2
JB MB
MOV AL,[DI]
AND AL,0FH
MOV CL,3
SHL AL,CL
MOV BL,[DI+1]
AND BL,0FH
OR BL,AL
JMP MC
MB: MOV BL,[DI]
AND BL,0FH
MC: MOV M,BL
; M中放八进制数拼接后的二进制
CALL SUB5
MOV DL,'='
MOV AH,2
INT 21H ;输出二进制
;
CALL SUB7
MOV DL,'='
MOV AH,2
INT 21H ;输出十进制
;
CALL SUB8 ;输出十六进制
;
RET
SUB1 ENDP
; ;输入八进制显示其它相应的进制
SUB2 PROC
CMP N,8
JBE MD
JMP EI
MD: LEA DI,BUF
MOV CH,0
MOV CL,N
MOV BL,0
ER: MOV AL,[DI]
AND AL,0FH
RCL AL,CL
RCR AL,1
OR BL,AL
INC DI
LOOP ER
MOV M,BL
; M中放二进制数拼接后的二进制
CALL SUB6
MOV DL,'='
MOV AH,2
INT 21H ;输出八进制
;
CALL SUB7
MOV DL,'='
MOV AH,2
INT 21H ;输出十进制
;
CALL SUB8 ;输出十六进制
;
RET
SUB2 ENDP
; 输入二进制显示其它相应的进制
SUB3 PROC
LEA DI,BUF
CMP N,4
JB ME
JMP EI
ME: CMP N,3
JB MF
MOV DL,100
MOV AH,0
MOV AL,[DI]
AND AL,0FH
MUL DL
MOV BX,AX
MOV DL,10
MOV AH,0
MOV AL,[DI+1]
AND AL,0FH
MUL DL
ADD BX,AX
MOV AH,0
MOV AL,[DI+2]
AND AL,0FH
ADD BX,AX
JMP MH
MF: CMP N,2
JB MG
MOV DL,10
MOV AH,0
MOV AL,[DI]
AND AL,0FH
MUL DL
MOV BX,AX
MOV AH,0
MOV AL,[DI+1]
AND AL,0FH
ADD BX,AX
JMP MH
MG: MOV BH,0
MOV BL,[DI]
AND BL,0FH
MH: CMP BX,0FFH
JBE NN
JMP EI
NN: MOV M,BL
; M中放十进制数拼接后的二进制
CALL SUB5
MOV DL,'='
MOV AH,2
INT 21H ;输出二进制
;
CALL SUB6
MOV DL,'='
MOV AH,2
INT 21H ;输出八进制
;
CALL SUB8 ;输出十六进制
;
RET
SUB3 ENDP
; 输入十进制显示其它相应的进制
SUB4 PROC
LEA DI,BUF
CMP N,3
JB MI
JMP EI
MI: CMP N,2
JB MK
MOV AL,[DI]
CMP AL,41H
JB LA
SUB AL,39H
ADD AL,2
JMP LB
LA: AND AL,0FH
LB: MOV CL,4
SHL AL,CL
MOV BL,AL
MOV AL,[DI+1]
CMP AL,41H
JB LC
MJ: SUB AL,39H
ADD AL,2
JMP LD
LC: AND AL,0FH
JMP LD
MK: MOV BL,0
MOV AL,[DI]
CMP AL,41H
JB LC
JMP MJ
LD: OR BL,AL
MOV M,BL
; M中放十六进制数拼接后的二进制
CALL SUB5
MOV DL,'='
MOV AH,2
INT 21H ;输出二进制
;
CALL SUB6
MOV DL,'='
MOV AH,2
INT 21H ;输出八进制
;
CALL SUB7 ;输出十进制
;
RET
SUB4 ENDP
; ;输入十六进制显示其它相应的进制
SUB5 PROC
MOV CX,1
MOV DL,M
CMP M,0
JZ LF
MOV FLAG,0
MOV CX,8
EJ: MOV DL,M
RCL DL,1
RCR DL,CL
AND DL,1
CMP DL,0
JNZ LF
CMP FLAG,0
JZ LG
LF: OR DL,30H
MOV AH,2
INT 21H
MOV FLAG,1
LG: LOOP EJ
MOV DL,'B'
MOV AH,2
INT 21H
RET
SUB5 ENDP
; 把M中的二进制数显示
SUB6 PROC
MOV DL,M
MOV CL,6
SHR DL,CL
CMP DL,0
JZ EM
OR DL,30H
MOV AH,2
INT 21H
MOV FLAG,1
EM: MOV DL,M
MOV CL,3
SHR DL,CL
AND DL,7
CMP DL,0
JNZ LR
CMP FLAG,0
JZ LS
LR: OR DL,30H
MOV AH,2
INT 21H
LS: MOV DL,M
AND DL,7
OR DL,30H
MOV AH,2
INT 21H
MOV DL,'Q'
MOV AH,2
INT 21H
RET
SUB6 ENDP
; 把M以八进制数显示
SUB7 PROC
MOV AH,0
MOV AL,M
MOV CL,100
DIV CL
MOV DX,AX
CMP DL,0
JZ EK
OR DL,30H
MOV AH,2
INT 21H
MOV FLAG,1
EK: MOV AH,0
MOV AL,DH
MOV CL,10
DIV CL
MOV DX,AX
CMP DL,0
JNZ LH
CMP FLAG,0
JZ LI
LH: OR DL,30H
MOV AH,2
INT 21H
LI: MOV DL,DH
OR DL,30H
MOV AH,2
INT 21H
MOV DL,'D'
MOV AH,2
INT 21H
RET
SUB7 ENDP
; 把M以十进制数显示
SUB8 PROC
MOV CL,4
MOV DH,2
EL: MOV DL,M
SHR DL,CL
AND DL,0FH
CMP DL,9
JA A
OR DL,30H
JMP H
A: SUB DL,9
ADD DL,40H
H: MOV AH,2
INT 21H
SUB CL,4
DEC DH
JNZ EL
MOV DL,'H'
MOV AH,2
INT 21H
RET
SUB8 ENDP
; 把M以十六进制数显示

CSEG ENDS
END START
呵呵

如何输入?从键盘还是什么方式?


汇编程序题,请高手解答一下
AL ;将AL(两个数的和)放到以BX为地址的单元(即SUM,完成相加的操作)INC SI ;SI指向NUM1下一个元素 INC DI ;DI指向NUM2下一个元素 INC BX ;BX指向SUM下一个单元 DEC CX ;CX-- JNZ AG ;CX如果不为0(没有循环到4次),跳到AG,否则继续执行,即结束程序 ...

#汇编语言程序题#
ax=4 addr的值是dat2-dat1 dat2-dat1是两个地址相减,也就是dat2的首地址减去dat1的首地址 差很显然就是dat1所占内存字节数,也就是4。或者你把内存单元占用情况列举出来:dat1是dseg段定义的第一个数据,那么它的偏移地址应该是0,所以:0000 31h——这是dat1表示的位置 0001 32h 0002 ...

高分悬赏,汇编语言高手进
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...

汇编高手进,几个简单题目!
1 .2个个位数相加(其结果<16),通过键盘输入输出 DATA SEGMENT STR1 DB 0AH,0DH,'opr1 = ','$'STR2 DB 0AH,0DH,'opr2 = ','$'RES DB 0AH,0DH,'sum = ','$'RESULT DB 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR START:PUSH DS SUB AX,AX MOV ...

汇编语言高手看一下!
汇编程序如下:stack segment stack db 200 dup(0)stack ends data segment bufout db "Please input 10 numbers(<100): $"bufin db 81 db 0 db 81 dup(0)n=10 data ends code segment assume cs:code,ds:data,ss:stack begin:mov ax,data mov ds,ax mov si,1 lea dx,bufout mo...

汇编程序题目,求详解
该程序是一个循环程序 循环次数4次 即CX=4做循环计数器 用SI做指向源操作数的指针 即指向 1000H×16+101H=10101H 用DI做指向目的操作数的指针 即指向 1000H×16+100H=10100H 循环内容是将数据段10101H、10102H、10103H、10104H的内容 分四次传送给数据段10100H、10101H、10102H...

请高手帮我写两个汇编程序
mov cl,buf+1 ;获得实际输入的字符个数(字节数)lea si,buf+2 mov ax,0 mov bx,0 lop: cmp byte ptr[si],'0'jb other ;其它字符 cmp byte ptr[si],'9'ja next inc al ;数字字符个数计数 jmp con next: cmp byte ptr[si],'...

关于一个汇编程序的问题
jb start2;小于'a'则进行下一个字符判断 cmp al,7Ah ja start2;大于'z'则进行下一个字符判断 sub al,20h ;将小写转换为大写 start2:mov [di],al inc di inc si;调整SI指向下一个字符 jmp start1;循环处理所有字符 start3:mov byte ptr [di],'$'lea dx,str1;输出源串 mov ah,9...

求高手,用汇编语言完成下面的编程,谢谢,急用~~~
data segment DATA1 db 55,70,82,90,60,70,95,84,75,63,20 dup(64),0 DATA2 db 5 dup(0)SORCE DB 60 dup(4) ;0~59 DB 10 dup(3) ;60~69 DB 10 dup(2) ;70~79 DB 10 dup(1) ;80~89 DB 166 dup(0) ;90~255 data ends CODE SEGMENT ASSUME CS:CODE,DS:data START...

高手请进!微机语言汇编题!求助!!!
六、判断题 (对)同一8086汇编程序中,可以多次用=伪指令对同一个常量进行定义。(对)宏定义的长度对汇编后的程序长度没有影响,但。。。用宏的次数对汇编后的长度有影响。(对)在8086的汇编指令中,源操作数和目的操作数不能同时存储器操作数。(错)伪指令DW的作用是定义一个字节的数量。(对...

大城县18643838229: 求汇编高手做个简单的编程题
宇侵消癌: assume cs:code ,ds:data,ss:stackdata segmentstring db 'helloworld$'dw ?data endscode segmentstart:mov ax,datamov ds,axlea bx,string ;指向字符串xor cx,cx ;计数清零again:mov dl,[bx]cmp dl,'$' ;是否为结束符jne overinc cx ;计数加1inc ...

大城县18643838229: 汇编语言程序设计试题,高手来!
宇侵消癌: LS第10题、第12题回答错误. 1.唯一代表存储空间中每个字节单元的地址是: 物理地址. 2.JNC指令转移的测试条件是: 进位标志位复位,即CF=0(源操作数不小于目的操作数). 3.将端口地址为30H中的数据传送到CPU中的指令是: IN AL...

大城县18643838229: 请教一道简单的汇编语言题目,高手来看看,谢谢
宇侵消癌: 应该是9吧,就是X1到X3的空间的比特数.

大城县18643838229: 急求!!!请高手做一个汇编语言的编程题!!! -
宇侵消癌: 我试试看MOV DPTR, #1000HMOV R7, #0MOV R6, #0MOV R5, #100 LADD:MOVX A, @DPTRINC DPTRADD A, R6MOV R6, ACLR AADDC A, R7MOV R7, ADJNZ R5, LADDRET

大城县18643838229: 用汇编语言编写一个程序快点啊,请教高手了,题目如下:<br/>
宇侵消癌: 感楼主诚意,费了九牛二虎之力,方才完成.不知能否满足要求.; 本程序通过编译,运行正确Code Segment Assume CS:Code,DS:CodeCR equ 000DHLF equ 000...

大城县18643838229: 求助一道汇编的题 望高手解答
宇侵消癌: data segment Tips db 'Please Input a String: ',0dh,0ah,'$' Buffer db 82,0,80 dup(0) Result db 0dh,0ah,' letter=' letter dw 0 R2 db ' dight=' dight dw 0 R3 db ' other=' other dw 0 R4 db 0dh,0ah,'$' data ends code segment assume cs:code,ds:data aam ...

大城县18643838229: 求救<汇编语言>高手一道题 在线等 急!!!!! -
宇侵消癌: 这个题的关键是在判断高八位中的最高位的符号(第十六位):循环左移一位,然后将得到的数和0001h相与,判断是0还是1,得到数据是0就是正数,得到是1则是负数,是正数再将数和10比较,比10大时屏蔽最高位,和0efffh相与,得到绝对...

大城县18643838229: 求高手一个汇编题,编程找出10000以内所有完数并输出. 要求:提示“Enter键输出10000 以内所有完数” -
宇侵消癌: #include <stdio.h> int factorsum(int number) { int sum=0, i; for(i=1; i <= number-1; i++) { if(number % i == 0) sum += i; } return sum; } int main(void) { int factor, m, n, number, sum; int repeat, ri; scanf("%d",&repeat); for(ri = 1; ri <= repeat; ri++){ scanf...

大城县18643838229: 一道简单的汇编程序题!急求!在线等! -
宇侵消癌: CLC ;清除CF MOV CX,AX SUB AX,BX ;AX←AX-BX,影响CF JC AA ;CF=1转AA去执行(即AX MOV DI,2800H ;结果指针DI=2800H MOV [DI],AX ;结果送到2800H和2801H单元 JMP LP ;暂停 AA:SUB BX, CX ;BX←BX-CX MOV DI,2800H...

大城县18643838229: 汇编程序题(汇编高手速进) -
宇侵消癌: 以下代码均经emu8086仿真软件运行无错.第一题: data segment num db 48,49,50,51,52,53,54,55,56,57 data endscode segment assume cs:code,ds:datastart:mov ax,data mov ds,ax mov bx,offset num mov ah,01h int 21h mov dl,al mov dh,al ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网