汇编语言高手进,在线等,急
;*******************
; 你的源码: 个别地方有问题,已经改正了。
; 显示的效果在最后,特殊字符用S表示出来了。
;*******************
DATAS SEGMENT
DB 128 DUP(0)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:MOV AX,DATAS ;
MOV DS,AX
MOV BH,16 ;一共显示16行
MOV DL,00H ;从字符00H开始显示
MOV CX,8 ;一行显示8个字符
;******* 此段作修改
;FOR1:CMP DL,0AH
; JNZ AA ;换行、回车作特殊处理,好像有问题
; MOV DL,30H
; MOV AH,2
; INT 21H
; MOV DL,20H
; MOV AH,2
; INT 21H
; MOV DL,0BH ;先赋值0BH
; CMP DL,0DH ;再与0DH比较
; JNZ AA ;肯定不相等所以跳到AA
;--------------------------------------------------------------------------------------
; ********* 修改如下
FOR1:MOV BL,DL ;保存当前字符值
CMP DL,07H ; 07 - 0a,以及0d都是一些特殊控制字符
JB AA ;小于07直接输出
CMP DL,0AH ;再与0AH比较
JNA BB ;07 - 0A之间,特殊处理
CMP DL,0DH ;比07大,但不必0A小,再与0DH比较
JNZ AA ;不是0D,跳到AA,直接输出
BB: sub dl,07 ;07 - 0a,以及0d这些特殊控制字符,在此处理
add DL,30H
MOV AH,2
INT 21H
MOV DL,'S' ; 来表示特殊字符
MOV AH,2
INT 21H
Jmp CC ;肯定不相等所以跳到AA
;--------------------------------------------------------------------------------------
MOV DL,31H ;从这里开始,一直到AA标号处的代码就无用了
MOV AH,2
INT 21H
MOV DL,20H
MOV AH,2
INT 21H
MOV DL,0EH
;-------------------------------------------------------------------------------------------------
AA: MOV AH,2
INT 21H ;调用02功能显示该字符显示空格
MOV DL,20H ;显示空格
MOV AH,2
INT 21H
CC: INC BL ; 接着处理下一个字符
MOV DL,BL ;恢复当前字符值
LOOP FOR1 ;一行内的循环
PUSH DX ;保存当前字符值
;|<----------------------------- 显示回车与换行
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
POP DX
;显示回车与换行 ----------------------------->|
MOV CX,8 ;再次设置一行8个字符
FOR2:DEC BH
CMP BH,0H
JNZ FOR1 ;直到显示完所有16行
MOV AH,4CH
INT 21H ;程序退出
CODES ENDS
END START
end
这是你的代码的输出,没有什么问题呀!
格式看着不太公整的原因主要是因为,这些字符中有一些控制字符
如:00H 不显示,
☺ ☻ ♥ ♦ ♣ ♠ 0S
1S2S3S♂ ♀ 6S♫ ☼
► ◄ ↕ ‼ ¶ § ▬ ↨
↑ ↓ → ← ∟ ↔ ▲ ▼
! " # $ % & '
( ) * + , - . /
0 1 2 3 4 5 6 7
8 9 : ; < = > ?
@ A B C D E F G
H I J K L M N O
P Q R S T U V W
X Y Z [ \ ] ^ _
` a b c d e f g
h i j k l m n o
p q r s t u v w
x y z { | } ~ ⌂
;在这,我就用我自己学的知识回答一下了,你可以参考一下思路,因为
;答案不一定能够完全确保正确,由于时间和能力有限
1.
;这题,看了很久也看不出怎么填,
;是不用CX用统计‘1’的个数啊,
;还这里IMP L1,IMP指令我没看过,只看过JMP
;如果IMP是JMP的话,那会不会出现死循环的,
2.
;这里由题中JB知应该是无符号数相比,
;所以不用考虑符号了
CMP DX,BX
JA L2
JB L1
CMP AX,CX
JA L2
3.
(1).
XOR AL,00010101B
(2).
TEST AL,00000010B
JZ EXIT
TEST AL,00001000B
JZ EXIT
TEST AL,00100000B
JZ EXIT
JMP L1
.
.
EXIT:
(3).
PUSHF
POP AX
(4).
MOV AX,DS
MOV ES,AX
MOV DI,3000H
CLD
MOV AL,0
MOV CX,50
REP STOSB
(5).
;这里DX和AX是作为一个整体来对待是吧
;也就是组成一个双字数,是吧,
MOV CX,4
L1:
SHL AX,1 ;左移一位并送CF,空位用0填充
RCL DX,1 ;左移一位用CF先填充空位,后移出送位CF
LOOP L1
;要不直接用80386+指令最快
SHLD DX,AX,4
(6).
;这里我只把DX变为正数,因为DX和AX组成双字数是吧
TEST DX,10000000B
JZ NEXT
NEG DX
NEXT:
(1)ROL指令移位次数大于时,用CL,可改为MOV CL,2 ROL BX, CL
(4)LEA指令的源操作数应该为存储器操作数,不能为寄存器BX
(6)寄存器间接寻址时只能使用BX、BP、SI、DI,而不能使用CX
(7)输入/输出指令是累加器专用指令,8位累加器是AL,不是AH
8、 VAR1 DW 3B ( 2个) ;说明:一个字占2个字节
VAR2 DW 5 DUP(2),0 ( 12个 ) ;说明:6个字12个字节
VAR3 DD —1,1,1 ( 12个) ;说明:3个双字12个字节
COUNT EQU 10 (0个 ); 说明:常量不占内存
VAR4 DT 4,AB (20个 );说明:DT表示10个字节,2个DT即为20个字节
9、(1)该程序实现20H*30H的功能,说明循环30H,每次累加20H。
(2)结果存放在AX中
10、(1) CS和IP的分别内容是1500H和2000H,说明段间远转移CS和IP都改变
(2) CS和IP的分别内容是1200H和2000H,说明段内转移CS不变,只是IP改变
11、SP,SS,CX中的内容分别是0FFCH,1000H,2103H
这些题现在有个问题,不同的CPU环境下的答案是不一样的.比如在8086环境下,你的7.(6)是错误的,但在80386以上的32位环境下却是正确的.所以,请你补充完成你的课程的具体针对环境再讨论吧.对了,从字面观察,你的这些题都属于8086基本汇编,或者起码是IA-32环境下的实模式环境.请你尽快确定吧,不然难为别人呢
编程分析:
求N!本身是一个子程序,由于N!是N和(N-1)!的乘积,所以求(N-1)!必须递归调用求N!的子程序。
7 (4)错
应为 LEA AX,[BX]
估计你不会在这找到满意的答复了。
C语言编程高手进,如何做啊、
include <stdio.h> include <math.h> void func(int min, int max){ int i, j, med = sqrt((double)(max*max\/2));for(i = min; i <= med; i++){ int bMax = sqrt((double)(max*max - i*i)) + 1;for(j = i; j < bMax; j++){ int sumL = i*i + j*j;int s...
C语言编程:一个运动中的笑脸(C语言高手进)
原因比较简单,因为只打印了一个笑脸,所以它不会动 include<stdio.h> include<conio.h> struct move_point { int x,y;int xv,yv;}man; \/*定义了一个叫man的结构体变量,x,y,xv,yv默认是0!如果要让它动的话,至少要给xv,yv中一个赋值*\/ int main(){ \/***\/ gotoxy(man.x,man.y)...
C语言与网络问题 高手进
C语言与网络问题 高手进 100 用C程序实现PING命令给出注释和流程图... 用C程序实现PING命令 给出注释和流程图 展开 我来答 1个回答 #热议# 已婚女性就应该承担家里大部分家务吗? baihacker 2006-12-06 · TA获得超过1442个赞 知道小有建树答主 回答量:773 采纳率:100% 帮助的人:961万...
c语言高手进,尽量多做点
13 include <iostream> include <cstdio> using namespace std;bool even(int n){ if(n%2) return 0;else return 1;} int main(){ int n;scanf("%d",&n);if(even(n)) printf("1\\n");else printf("0\\n");return 0;} 14 include <iostream> include <cstdio> using namespace ...
C语言高手进
这是以前学习的做也,可以参考哈.<万年历> include<stdio.h> void main(){ \/\/输入年月日及switch常量;int year,month,day,sum;\/\/定义 char need;\/\/定义天数;int days1,days2,days3,days4,days5,days6,days7,days8,days9,days10,days11,days12;do { printf("请输入年月日 如2008 8...
c语言编程题高手进!!!
main(){ printf("%d\\n",fun(4));getch();} int fun(int x){ if(x==0) return 1;else if(x==1) return 3 ;else return fun(x-1)+fun(x-2);}
C语言和C++高手进!!抢分啦,做的好的额外追加积分,急急急。。在线等...
5、score [问题描述]某门课程的总评成绩由平时成绩、考试成绩两部分组成, 且在总评成绩中所占的比例分别为平时 30%,考试 70%。请编写一个程序根据平时成绩和考试成绩,按上述比例计算出该同学的总评成绩(总评成绩保留一位小数)。自己写的,先看看吧 include"stdio.h"main(){int a,b;double ave=...
汇编语言高手进,求程序每一步的意思!,尤其是一开始我知道MOV AX,DATA是...
个人理解:这个AX在这里起到的是一个间接变量的作用。传递DATA的值。DS值改变后,AX里的值依然是DATA的值,当你下次需要用到DATA的值的时候可以直接用AX赋。很多程序都是这样的。
C语言编程问题...高手进来解答...
因为你输入字符后会同时按了一下回车键。注意回车键也是字符。而且小于65,所以也符合条件,因此会多输出一次文字 while(c1>90||c1<65){ getchar();\/\/加个这个来存回车键,试一下 printf("您输入有误,请重新输入\\n");scanf("%c",&c1);} ...
求位C语言编程高手帮忙编程序?
include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 2 \/*车库容量*\/ #define price 0.05 \/*每车每分钟费用*\/ typedef struct time{ int hour; int min; }Time; \/*时间结点*\/ typedef struct node{ char num[10]; Time reach; Time leave; }Car...
扈修信立: 这个题的关键是在判断高八位中的最高位的符号(第十六位):循环左移一位,然后将得到的数和0001h相与,判断是0还是1,得到数据是0就是正数,得到是1则是负数,是正数再将数和10比较,比10大时屏蔽最高位,和0efffh相与,得到绝对...
温泉县19687777008: 急急急!!!懂汇编语言的高手请进 - ?
扈修信立: DATA SEGMENT X DB ?Y DB ?DATA SEGMENT CODE SEGMENT ASSUME CS;CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AH,01H INT 21H CALL ASC_DEAL MOV X,DL ;将输入的字符转换成为数值存入X MOV AH,01H ...
温泉县19687777008: 汇编语言,,,求最大值,,,急!在线等 - ?
扈修信立: assume cs:code, ds:data data segment a db 3 b db 5 c db 1 s db 'max=$',0 data ends code segment start: mov ax, data mov ds, ax mov a, al cmp al, b jge l1 mov al, b l1: cmp al, c jge l2 mov al, c l2: mov bx, ax mov ah, 9 mov dx, offset s int 21h mov ...
温泉县19687777008: 求汇编高手解答 在线等 - ?
扈修信立: ;cmp si, diJL NEXT (1)MOV SI, DI (2) next:mov wmin, si
温泉县19687777008: 汇编语言.高手进. - ?
扈修信立: ;现有一个以“$”结尾的字符串,要求剔除其中的空格字符 assume ds:data,cs:code,ss:stack data segment string1 db 'Let us have a try','$' string2 db 30 dup(0) data ends stack segment stack db 20 dup(0) stack ends code segment start: mov ax,...
温泉县19687777008: 汇编语言 在线等 - ?
扈修信立: 第一题2. code segment3. assume cs:code4. start: data ax,0025h5. shl data 26. code ends7. end start 第二题 CODE SEGMENT ASSUME CS:CODE START: MOV AX,3333H MOV BX,1111H SUB AX,BX MOV AX,4COOH INT 21H CODE ENDS END START
温泉县19687777008: 求汇编语言高手解释 在线等 - ?
扈修信立: 夜深了!0.0 OUTPORT 1 EQU 2A0H //分别给OUTPORT 1、2端口号赋值2A0H、2A8H OUTPORT 2 EQU 2A8H Code Segment //定义代码段 Assume Cs: Code //表明段与段关系 START:MOV DX,OUTPORT 1 //将2A0H传给DX寄存器 OUT DX,AL...
温泉县19687777008: 汇编语言作业 高手进 急!!?
扈修信立: 1.A AL:0001 0002 0003 0004 B AL:0031 0032 0033 0034 C AX:0000 0001 0000 0002 0000 0003 0000 0004 D AX:0000 1234 E EAX:0000 0000 0000 1234 第二题不会,不过num=10 第三,Y的数据是三个未初始化的8位无符号整数 我也是才学汇编的...错了不管....
温泉县19687777008: 汇编语言程序设计问题 在线等 高手谢谢 - ?
扈修信立: 第一题 CDE(题目有点小出入 应该是变量的类型属性AB选项属于段属性) 第二题A 第三题AD 第四题 BC 第五题CDE
温泉县19687777008: 汇编高手进!!!!满意有加分! - ?
扈修信立: 1、编写汇编语言源程序结构框架.定义程序代码段及数据段,并初始化数据段寄存器.;程序模板 DSEG SEGMENT ;数据段:在此处添加程序所需的数据 DSEG ENDS CSEG SEGMENT assume cs:CSEG, ds:DSEG MAIN PROC FAR ;主...