高分悬赏,解汇编语言题
1,设A,B,C存放三个整数,若三个整数都不为零,则求三数之和,并存放于D中,若有一个数为0,则将其他数也清零,最后将结果输出。要求,至少定义一个子程序,一个宏。2,从键...
1,设A,B,C存放三个整数,若三个整数都不为零,则求三数之和,并存放于D中,若有一个数为0,则将其他数也清零,最后将结果输出。要求,至少定义一个子程序,一个宏。
2,从键盘输入十个数(输入回车时表示输入结果),然后将这些数加密后存于BUFF缓冲区中,加密数为:
输入:0,1,2,3,4,5,6,7,8,9
密码:7,5,9,1,3,6,8,0,2,4 展开
2,从键盘输入十个数(输入回车时表示输入结果),然后将这些数加密后存于BUFF缓冲区中,加密数为:
输入:0,1,2,3,4,5,6,7,8,9
密码:7,5,9,1,3,6,8,0,2,4 展开
6个回答
展开全部
我不是科班,也没有老师;学汇编至今靠的只是一本废品站的旧书。
希望版主大侠能对提问补充,告诉我:什么是宏,能给个网址更好。
第1题 设定三数皆<10000H(偷了点懒,不要笑话),依次存在代码段CS
偏移01d0H处: A=A312H、B=C424H、C=9554H,累加和存入偏移0300处,
屏幕输出十六进制结果。手工汇编,进DEBUG中:
---------------------------------------
A100
push cs/pop ds
xor ax,ax/mov dx,ax
mov si,[1d0]/mov di,[1d2]/cs:mov bp,[1d4]
or si,si/jz X0
or di,di/jz X0
or bp,bp/jz X0
call X2
jmp X1
X0:mov [1d0],ax/mov [1d2],ax/mov [1d4],ax
X1: mov [300],dx
mov [302],ax
mov dx,0/mov ah,9/int 21
mov si,[300]/call X3
mov si,[302]/call X3
mov ax,0e48/int 10
mov al,0d/int 10
mov al,0a/int 10
mov ah,4c/int 21
a160
X2: mov ax,si/add ax,di/adc dx
add ax,bp/adc dx ;三数累加
ret
a180
X3: mov bx,si/mov cx,4 ;输出部分
X4: push cx
mov dl,bh/mov cl,4
shr dl,cl/or dl,30
cmp dl,3a/jb X5
add dx,7
X5: mov ah,2/int 21
mov cl,4/rol bx,cl
pop cx
loop X4
ret
e1b0 'A+B+C= $'
-------------------------------------
X0=0124H;X1=012dH;X2=0160H;
X3=0180H;X4=0185H;X5=0197H。
第2题
数字加密,假设输入的都是有效数字(0-9);
下面程序经DEBUG验证通过,由Debug自动导出。
0100 EB0E JMP 0110
0102 0000 ADD [BX+SI],AL
0104 0000 ADD [BX+SI],AL
0106 37 AAA
0107 353931 XOR AX,3139
010A 33363830 XOR SI,[3038]
010E 3234 XOR DH,[SI]
0110 0E PUSH CS
0111 1F POP DS
0112 0E PUSH CS
0113 07 POP ES
0114 BE8001 MOV SI,0180
0117 BF0010 MOV DI,1000
011A B0FF MOV AL,FF
011C B90A00 MOV CX,000A
011F 8804 MOV [SI],AL
0121 81C60001 ADD SI,0100
0125 E2F8 LOOP 011F
0127 BE8001 MOV SI,0180
012A B90A00 MOV CX,000A
012D 51 PUSH CX
012E 89F2 MOV DX,SI
0130 B40A MOV AH,0A
0132 CD21 INT 21
0134 B80D0E MOV AX,0E0D
0137 CD10 INT 10
0139 B00A MOV AL,0A
013B CD10 INT 10
013D 81C60001 ADD SI,0100 ;以上接收10串数字输入
0141 59 POP CX
0142 E2E9 LOOP 012D
0144 FC CLD
0145 BB0601 MOV BX,0106
0148 BD8101 MOV BP,0181
014B B90A00 MOV CX,000A
014E 51 PUSH CX
014F 89EE MOV SI,BP
0151 AC LODSB
0152 98 CBW
0153 89C1 MOV CX,AX
0155 AC LODSB
0156 240F AND AL,0F
0158 D7 XLAT ;查表转换
0159 AA STOSB
015A E2F9 LOOP 0155
015C 81C50001 ADD BP,0100
0160 30C0 XOR AL,AL
0162 AA STOSB ;加密后存入从CS:1000H开始
0163 59 POP CX ;的内存,串间用 00 隔开。
0164 E2E8 LOOP 014E
0166 B44C MOV AH,4C
0168 CD21 INT 21
016A 0000 ADD [BX+SI],AL
希望版主大侠能对提问补充,告诉我:什么是宏,能给个网址更好。
第1题 设定三数皆<10000H(偷了点懒,不要笑话),依次存在代码段CS
偏移01d0H处: A=A312H、B=C424H、C=9554H,累加和存入偏移0300处,
屏幕输出十六进制结果。手工汇编,进DEBUG中:
---------------------------------------
A100
push cs/pop ds
xor ax,ax/mov dx,ax
mov si,[1d0]/mov di,[1d2]/cs:mov bp,[1d4]
or si,si/jz X0
or di,di/jz X0
or bp,bp/jz X0
call X2
jmp X1
X0:mov [1d0],ax/mov [1d2],ax/mov [1d4],ax
X1: mov [300],dx
mov [302],ax
mov dx,0/mov ah,9/int 21
mov si,[300]/call X3
mov si,[302]/call X3
mov ax,0e48/int 10
mov al,0d/int 10
mov al,0a/int 10
mov ah,4c/int 21
a160
X2: mov ax,si/add ax,di/adc dx
add ax,bp/adc dx ;三数累加
ret
a180
X3: mov bx,si/mov cx,4 ;输出部分
X4: push cx
mov dl,bh/mov cl,4
shr dl,cl/or dl,30
cmp dl,3a/jb X5
add dx,7
X5: mov ah,2/int 21
mov cl,4/rol bx,cl
pop cx
loop X4
ret
e1b0 'A+B+C= $'
-------------------------------------
X0=0124H;X1=012dH;X2=0160H;
X3=0180H;X4=0185H;X5=0197H。
第2题
数字加密,假设输入的都是有效数字(0-9);
下面程序经DEBUG验证通过,由Debug自动导出。
0100 EB0E JMP 0110
0102 0000 ADD [BX+SI],AL
0104 0000 ADD [BX+SI],AL
0106 37 AAA
0107 353931 XOR AX,3139
010A 33363830 XOR SI,[3038]
010E 3234 XOR DH,[SI]
0110 0E PUSH CS
0111 1F POP DS
0112 0E PUSH CS
0113 07 POP ES
0114 BE8001 MOV SI,0180
0117 BF0010 MOV DI,1000
011A B0FF MOV AL,FF
011C B90A00 MOV CX,000A
011F 8804 MOV [SI],AL
0121 81C60001 ADD SI,0100
0125 E2F8 LOOP 011F
0127 BE8001 MOV SI,0180
012A B90A00 MOV CX,000A
012D 51 PUSH CX
012E 89F2 MOV DX,SI
0130 B40A MOV AH,0A
0132 CD21 INT 21
0134 B80D0E MOV AX,0E0D
0137 CD10 INT 10
0139 B00A MOV AL,0A
013B CD10 INT 10
013D 81C60001 ADD SI,0100 ;以上接收10串数字输入
0141 59 POP CX
0142 E2E9 LOOP 012D
0144 FC CLD
0145 BB0601 MOV BX,0106
0148 BD8101 MOV BP,0181
014B B90A00 MOV CX,000A
014E 51 PUSH CX
014F 89EE MOV SI,BP
0151 AC LODSB
0152 98 CBW
0153 89C1 MOV CX,AX
0155 AC LODSB
0156 240F AND AL,0F
0158 D7 XLAT ;查表转换
0159 AA STOSB
015A E2F9 LOOP 0155
015C 81C50001 ADD BP,0100
0160 30C0 XOR AL,AL
0162 AA STOSB ;加密后存入从CS:1000H开始
0163 59 POP CX ;的内存,串间用 00 隔开。
0164 E2E8 LOOP 014E
0166 B44C MOV AH,4C
0168 CD21 INT 21
016A 0000 ADD [BX+SI],AL
展开全部
简单倒是简单,就是繁琐。
这2个都是很简单的汇编,还是认真学习吧。
这2个都是很简单的汇编,还是认真学习吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
汇编都是相对于某一硬件的。再者你还要有键盘字符输入,这需要相应的操作系统支持外加一些库的支持,要是直接在裸机上跑的程序(无操作系统环境),而且全用汇编实现,代码量不小啊。
总之问题应该再具体些。
总之问题应该再具体些。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
高深,想学不会啊!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询